为了举例,我有一个化学元素模型
class Element < ActiveRecord::Base
validates :name, presence: true, uniqueness: true
validates :symbol, presence: true, uniqueness: true
end
在seeds.rb
中我定义了所有已知元素
Element.where(name: "hydrogen" symbol: "H").first_or_create
...
Element.where(name: "ununoctium" symbol: "Uuo").first_or_create
我定义了一个工厂
FactoryGirl.define do
factory :element do
name "hydrogen"
symbol "H"
end
end
由于代码库依赖于所有种子元素的存在,我使用
准备测试数据库rake db:seed RAILS_ENV=test
现在我的工厂永远不会工作
FactoryGirl.create(:element) #=> validation failed error
如何以首先尝试在数据库中查找可创建对象的方式编写工厂?
FactoryGirl.create(:element) #=> returns Element from db || Factory invocation
答案 0 :(得分:0)
为什么不这样做:
element = Element.find_by(name: "hydrogen") || FactoryGirl.create(:element, name: "hydrogen", symbol: "H")