如何指定所有工厂共有的属性?

时间:2014-02-07 23:11:12

标签: ruby-on-rails ruby factory-bot

Rails数据库表通常具有时间戳(created_atupdated_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'

1 个答案:

答案 0 :(得分:1)

您确定需要指定时间戳吗?尽管它们是具有NOT NULL约束的字段,但它们的缺失不会影响验证,因为Rails在插入或更新时应用这些约束。我没有在我的任何Rails 4应用程序上指定它们,这些工厂都通过了有效性测试。

您对其他常见属性的疑问,还是您特别关注时间戳?如果是后者,我认为你可以跳过所有这些工作。