Ruby on rails shoulda matchers属性似乎不是模型上的属性

Ruby on rails shoulda matchers属性似乎不是模型上的属性,ruby-on-rails,shoulda,Ruby On Rails,Shoulda,我刚刚在Rails 4.1上从2.8.0升级到shoulda matchers 3.1.2,现在我的validate Unique scoped to test失败,并显示此消息 1) Invoice should validate that :invoice_no is case-sensitively unique within the scope of :ledger_id Failure/Error: it { is_expected.to validate_uniquen

我刚刚在Rails 4.1上从2.8.0升级到shoulda matchers 3.1.2,现在我的validate Unique scoped to test失败,并显示此消息

  1) Invoice should validate that :invoice_no is case-sensitively unique within the scope of :ledger_id
     Failure/Error: it { is_expected.to validate_uniqueness_of(:invoice_no).scoped_to(:ledger_id)}

       Invoice did not properly validate that :invoice_no is case-sensitively
       unique within the scope of :ledger_id.
         :ledger_id does not seem to be an attribute on Invoice.
     # ./spec/models/invoice_spec.rb:6:in `block (2 levels) in <top (required)>'
是否存在:分类账id的测试通过

这是我的模型

  validates :ledger_id, presence: true
  validates_uniqueness_of :invoice_no, scope: :ledger_id, case_sensitive: false
解决方案我还在用机械师

  subject { Invoice.make!(ledger: Ledger.make!) }
  it { is_expected.to validate_uniqueness_of(:invoice_no).case_insensitive.scoped_to(:ledger_id)}

我想这是你的问题

试试这个:

require 'rails_helper'

RSpec.describe Invoice, :type => :model do
 is_expected = expect(create(:invoice))
 it { is_expected.to 
 validate_uniqueness_of(:invoice_no).case_insensitive.scoped_to(:ledger_id)}
 it { is_expected.to validate_presence_of(:ledger_id)}
require 'rails_helper'

RSpec.describe Invoice, :type => :model do
 is_expected = expect(create(:invoice))
 it { is_expected.to 
 validate_uniqueness_of(:invoice_no).case_insensitive.scoped_to(:ledger_id)}
 it { is_expected.to validate_presence_of(:ledger_id)}