そのため、Mongoid、Rspec、Factory_Girlで遊んでいて、埋め込みドキュメントでいくつか問題が発生しました。
私は次のモデルを持っていました:
class Profile
include Mongoid::Document
#Fields and stuff
embeds_one :address
validates :address, presence: true
end
class Address
include Mongoid::Document
#Fields and stuff
embedded_in :profile
end
したがって、このようなファクトリを定義すると、次のようになります。
FactoryGirl.define do
factory :profile do
#fields
address
end
end
次のようなエラーが発生しました:
Failure/Error: subject { build :profile }
Mongoid::Errors::NoParent:
Problem:
Cannot persist embedded document Address without a parent document.
Summary:
If the document is embedded, in order to be persisted it must always have a reference to it's parent document. This is most likely cause by either calling Address.create or Address.create! without setting the parent document as an attribute.
Resolution:
Ensure that you've set the parent relation if instantiating the embedded document direcly, or always create new embedded documents via the parent relation.
工場を次のように変更することで機能しました。
FactoryGirl.define do
factory :profile do
#fields
after(:build) do |p|
p.create_address(FactoryGirl.attributes_for(:address))
end
end
end
これは機能しますが、これを行うためのよりネイティブなFactory_Girlの方法があることを望んでいます。あるべきだと思われます。
前もって感謝します!