Rails / Factory Girl:相互存在验证

时间:2013-02-07 02:12:01

标签: ruby-on-rails factory-bot

我有两个轨道模型之间的关联,'项目'和'步骤',这样项目有很多步骤。一个步骤需要一个project_id,一个项目至少需要一个步骤才能生效...我想知道如何在没有递归问题的工厂女孩​​中创建它。

目前,我的工厂看起来像这样:

factory :project do
  #...
  steps { |s| [s.association(:step)] }
end

factory :step do
  #...
  association :project
end

当然,由于递归关联,返回“堆栈级太深”错误。问题是,我需要填充两个值。

任何建议表示赞赏。

1 个答案:

答案 0 :(得分:0)

假设这是你的模特:

class Project < ActiveRecord::Base
  has_many :steps
end

class Steps < ActiveRecords::Base
  belongs_to :project
  validates :steps, :presence => true
end

我认为这可能是一个工厂:

factory :project do
  after(:build) do |project|
    project.steps << FactoryGirl.create(:step)
  end
end

factory :step do
end

你可以在其中使用这样的project.spec.rb:

it "must have a step to be valid" do
  expect(FactoryGirl.create(:project)).to be_valid
end

我是从臀部开枪,很抱歉,如果这不起作用。无论如何,我认为这是一般性的想法。