我使用factory_girl
gem版本:4.4.0和ruby-1.9.3-p429
。我正在其中一个工厂中使用before(:create)
,如下所示:
factory :entity1 do
b_date Time.now
a_date Time.now
event "test_event"
before(:create) { FactoryGirl.create(:entity2) }
end
factory :entity2 do
from_date Date.today - 1.day
till_date Date.today + 1.day
end
现在from_date
和till_date
entity2
上有一个独特的条件,换句话说我只想创建entity2
一次。我可以在if
的工厂中引入一些entity1
条件,这样before(:create)
子句只在我第一次创建entity1
时执行,并且从下次开始它就不会执行entity2
条件。创建{{1}}。
答案 0 :(得分:0)
解决您的唯一性问题的最快方法是在创建现有模型之前查找现有模型:
before(:create) do
Entity2Model.find_by_unique_field('value') ||
FactoryGirl.create(:entity2)
end
但是,我也以此为契机,向自己问一些关于这种依赖性的问题:
entity2
的一个实例,它是否需要在数据库中?entity2
的一个实例,它作为单身方法比关联更有意义吗?entity1
每次使用时是否真的需要entity2
?如果是这样,他们可以脱钩吗?<强>更新强>
如果它只是一个唯一性约束而且您可以有多个,则可以使用序列生成entity2
的唯一值:
factory :entity2 do
sequence(:from_date) { |n| n.days.ago }
till_date { from_date + 1.day }
end