Rails:验证在datetime属性上使用before_create方法失败

时间:2014-09-14 20:58:38

标签: ruby-on-rails ruby validation

ApiKey.create! 

引发验证错误:expires_at不能为空。

class ApiKey < ActiveRecord::Base
  before_create     :set_expires_at

  validates :expires_at, presence: true

  private

  def set_expires_at
    self.expires_at = Time.now.utc + 10.days
  end
end

带有属性

t.datetime :expires_at

但是,如果删除了验证,则before_create方法适用于create。

这是为什么? - 此模式适用于其他属性,例如access_tokens(string)等

1 个答案:

答案 0 :(得分:8)

我会说,因为before_create在验证后运行,您可能希望将before_create替换为before_validation

注意:如果你像这样退出电话,只要你运行valid?save或任何激活验证的有效记录方法,就会设置到期日期,您可能希望仅将此验证限制为创建过程

before_validation :set_expires_at, on: :create

只有在第一次运行创建时才会限制函数调用。