0

別のモデル (Visibility) の has_one を持つ 1 つのモデル (Discussion) があります。before_validation :on => :createに値を設定しているディスカッション モデルの呼び出しがありますvisibility。つまり、次のようになります。

class Discussion
  has_one :visibility

  validates_presence_of :some_unrelated_field

  before_validation :set_visibility_relationship, :on => :create

  private

  def set_visibility_relationship
    visibility.some_entity = self.the_same_entity
  end
end

次に、 my に次のものがありますdiscussion_spec.rb

it { should validate_presence_of(:some_unrelated_field) }

before_validation がエラーをスローしています:

 Failure/Error: it { should validate_presence_of :some_unrelated_field }
 NoMethodError:
   undefined method `visibility.some_entity' for #<Discussion:0x007ff6ebc43170>

関連のないフィールドのbefore_validation呼び出しまたはのいずれかをコメント アウトすると、すべてのテストに合格します。should validate_presence_of

pry を使用してステップスルーしようとしたところ、discussion.errors に設定されているエラー キーの 1 つが "visibility.some_entity" であることがわかりましたが、他のすべてのキーは属性ベースでした (例: "some_unrelated_field")。このエラーがスローされる原因となっている rspec のバグがあるようですが、何か間違ったことをしている可能性もあります。

4

1 に答える 1

0

実際には shoulda-matchers 2.0.0 の問題のようです。バージョン 2.2.0 にアップグレードすると、問題が修正されました。

于 2013-06-25T14:44:24.427 に答える