FactoryGirl + Ancestry有两层深

时间:2013-10-14 13:14:28

标签: ruby-on-rails ruby factory-bot ancestry

基本上:

  • 我的Structure模型有很多Subjects
  • 每个主题都有一个父级,它可以是2级深度。
  • Structure必须有一个主题at_depth 0和一个主题at_depth 2.

问题:

  • 我无法弄清楚如何构建我的主题工厂以及如何在Structure Factory中建立关联。

我在Rails 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

提前致谢

2 个答案:

答案 0 :(得分:3)

好吧,这似乎有效:

Subject工厂:

工厂:主题做     名称Forgery(:name).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

答案 1 :(得分:2)

您是否考虑过使用after(:build)块?