假设你有以下mongoid文件:
class User
include Mongoid::Document
embeds_one :name
end
class UserName
include Mongoid::Document
field :first
field :last_initial
embedded_in :user
end
如何创建一个初始化嵌入式名字和最后一个名字的工厂女工厂?另外,你会如何处理embeds_many
关系?
答案 0 :(得分:63)
我也在寻找这个,当我正在研究时,我偶然发现了很多代码并将它们拼凑在一起(我希望有更好的文档)但是这是我的部分代码。地址是1..1关系,电话是与事件的1..n关系。
factory :event do
title 'Example Event'
address { FactoryGirl.build(:address) }
phones { [FactoryGirl.build(:phone1), FactoryGirl.build(:phone2)] }
end
factory :address do
place 'foobar tower'
street 'foobar st.'
city 'foobar city'
end
factory :phone1, :class => :phone do
code '432'
number '1234567890'
end
factory :phone2, :class => :phone do
code '432'
number '0987654321'
end
(对不起,如果我无法提供我的链接,他们有点搞砸了)
答案 1 :(得分:6)
这是一个允许您动态定义嵌入对象数量的解决方案:
FactoryGirl.define do
factory :profile do
name 'John Doe'
email 'john@bigcorp.com'
user
factory :profile_with_notes do
ignore do
notes_count 2
end
after(:build) do |profile, evaluator|
evaluator.notes_count.times do
profile.notes.build(FactoryGirl.attributes_for(:note))
end
end
end
end
end
这样,您就可以拨打FactoryGirl.create(:profile_with_notes)
并获取两个嵌入式笔记,或者拨打FactoryGirl.create(:profile_with_notes, notes_count: 5)
并获取五个嵌入式笔记。