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)等
答案 0 :(得分:8)
我会说,因为before_create
在验证后运行,您可能希望将before_create
替换为before_validation
注意:如果你像这样退出电话,只要你运行valid?
或save
或任何激活验证的有效记录方法,就会设置到期日期,您可能希望仅将此验证限制为创建过程
before_validation :set_expires_at, on: :create
只有在第一次运行创建时才会限制函数调用。