如何在一步中构建具有子工厂的父级以通过validation

项目必须至少同时创建一个任务以确保validation通过。 这是我用来validation这个的片段:

class Project  { :minimum => 1 } ... end 

我所面临的挑战是创建一个合适的工厂,使用FactoryGirl建立一个预先任务的项目。 我正在使用:

 FactoryGirl.define do factory :task do name "Get this test passing" project end factory :project do title "Complete the application" factory :project_with_tasks do ignore do tasks_count 5 end after(:create) do |project, evaluator| FactoryGirl.create_list(:task, evaluator.tasks_count, project: project) end end end end 

现在问题是它失败了,因为它实际上创建了项目,然后尝试创建关联的任务。 该错误报告为:

 Failure/Error: project = FactoryGirl.create(:project_with_tasks, tasks_count: 2) ActiveRecord::RecordInvalid: Validation failed: Projects must have at least one task 

将其转换为before(:create)意味着该项目无法参考。

任何帮助将不胜感激!

我最终通过以下方式建造工厂来通过它:

 project = FactoryGirl.build(:project) project.tasks << FactoryGirl.create(:task) project.save 

这会在保存完成之前将任务添加到项目中。

您可以尝试在(:create)之前“构建”项目的任务,然后(:create)保存它们以便通过validation错误吗?

例如:

  before(:build) do |instance| instance.tasks << build(:task, project: instance) end after(:create) do |instance| instance.tasks.each{|t| t.save!} end