基本上:
- 我有一个
Structure
模型,有很多Subjects
。 - 每个科目都有一个父级,它可以是 2 级深度。
Structure
必须有一个主题at_depth 0 和一个主题at_depth 2。
问题:
- 我不知道如何构建主题工厂以及如何在结构工厂中进行关联。
我在轨道 4、factory_girl_rails 4.2.1 和 Ruby 2.0.0 上
这是我为主题工厂尝试的内容:
factory :subject_grand_parent do |f|
name Forgery(:name).company_name
factory :subject_parent do |s|
f.parent { Factory.create(:subject_grand_parent) }
factory :subject do |s|
f.parent { Factory.create(:subject_parent) }
end
end
end
但我不能两次定义父母。
在Structure
工厂中,我不确定如何为我的关联定义多个主题。这里我现在拥有的:
factory :structure do
subjects {|structure| [structure.association(:subject)] }
...
end
提前致谢
好吧,这似乎有效:
Subject
工厂:
工厂:主题做 名称伪造(:名称).company_name
factory :subject_children do
name Forgery(:name).company_name + ' child'
after :build do |subject|
subject_grand_parent = Subject.create(name: Forgery(:name).company_name)
subject_parent = subject_grand_parent.children.create(name: Forgery(:name).company_name)
subject.parent = subject_parent
subject.ancestry_depth = 2
end
end
结束
Structure
工厂:
after(:build) do |structure|
structure.subjects << FactoryGirl.build(:subject)
structure.subjects << FactoryGirl.build(:subject_children)
end
你有没有考虑过使用 after(:build) 块?