Rails数据库表通常具有时间戳(created_at
和updated_at
),并且从rails 4开始,所有时间戳列都有NOT NULL
个约束。因此,所有工厂必须指定所述时间戳的值。如何指定所有工厂通用的属性,而不重复自己?
在issue 564中讨论了类似的事情。
我可以像这样使用instance_eval:
module SharedFactoryBits
def self.timestamps
Proc.new {
created_at { Time.zone.now }
updated_at { Time.zone.now }
}
end
end
# spec/factories/banana_factory.rb
FactoryGirl.define do
factory :banana do
instance_eval &SharedFactoryBits.timestamps
end
end
# spec/factories/kiwi_factory.rb
FactoryGirl.define do
factory :kiwi do
instance_eval &SharedFactoryBits.timestamps
end
end
但它不太清晰。
我正在使用:
gem 'factory_girl_rails', '~> 4.2.1'
答案 0 :(得分:1)
您确定需要指定时间戳吗?尽管它们是具有NOT NULL
约束的字段,但它们的缺失不会影响验证,因为Rails在插入或更新时应用这些约束。我没有在我的任何Rails 4应用程序上指定它们,这些工厂都通过了有效性测试。
您对其他常见属性的疑问,还是您特别关注时间戳?如果是后者,我认为你可以跳过所有这些工作。