Ruby on 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数据库表通常具有时间戳(
处创建)和
处更新),并且从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应用程序中指定它们,这些工厂都通过了有效性测试


您的问题是关于其他公共属性,还是您特别关心时间戳?如果是后者,我想你可以跳过所有这些工作。

谢谢。是的,我只关心时间戳,看起来我的工厂不需要时间戳。我有一个失败的测试告诉我,在列中创建的
非空
约束被违反了,我认为这是工厂的错,但这是在转移视线。