別のモデル (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 のバグがあるようですが、何か間違ったことをしている可能性もあります。