Ruby on rails 如何指定所有工厂通用的属性?
Rails数据库表通常具有时间戳(Ruby on rails 如何指定所有工厂通用的属性?,ruby-on-rails,ruby,factory-bot,Ruby On Rails,Ruby,Factory Bot,Rails数据库表通常具有时间戳(在处创建)和在处更新),并且从Rails 4开始,所有时间戳列都具有非空约束。因此,所有工厂必须为所述时间戳指定值。如何在不重复自己的情况下指定所有工厂通用的属性 类似的情况也在本报告中讨论过 我可以这样使用: module SharedFactoryBits def self.timestamps Proc.new { created_at { Time.zone.now } updated_at { Time.zone.n
在
处创建)和在
处更新),并且从Rails 4开始,所有时间戳列都具有非空
约束。因此,所有工厂必须为所述时间戳指定值。如何在不重复自己的情况下指定所有工厂通用的属性
类似的情况也在本报告中讨论过
我可以这样使用:
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'
您确定需要指定时间戳吗?即使它们是带有
NOTNULL
约束的字段,它们的缺失也不会影响验证,因为Rails会在插入或更新时应用这些约束。我没有在Rails 4应用程序中指定它们,这些工厂都通过了有效性测试
您的问题是关于其他公共属性,还是您特别关心时间戳?如果是后者,我想你可以跳过所有这些工作。谢谢。是的,我只关心时间戳,看起来我的工厂不需要时间戳。我有一个失败的测试告诉我,在列中创建的
的非空
约束被违反了,我认为这是工厂的错,但这是在转移视线。