在'before_save'事件之前调用val_presence_of吗?
如何在模型的属性上设置默认值?
答案 0 :(得分:1)
使用before_validation
回调:
class User
before_validation(:on => :create) do
self.time_zone ||= "Blah"
end
end
答案 1 :(得分:0)
是的,所有验证都会在 before_save
回调被触发之前运行。有关订单的完整列表,请参阅http://guides.rubyonrails.org/active_record_validations_callbacks.html#available-callbacks。
我建议使用after_initialize
。这就是它的目的。这意味着当它们从数据库加载时以及首次创建时都会调用它。换句话说,它们的属性与您期望的一致。
class User
def after_initialization
self.foobar ||= 'default value'
end
end
来自docs:
after_initialize回调将是 只要有活动记录就会调用 对象被实例化,或者通过 直接使用new或记录时 从数据库加载。有可能 有用的是避免直接需要 覆盖您的Active Record初始化 方法
将调用after_find回调 每当Active Record加载记录时 来自数据库。 after_find是 之前调用after_initialize如果两者都有 已定义。
after_initialize和after_find 回调有点不同 其他。他们之前没有* 同行,唯一的方法 注册它们是通过将它们定义为 常规方法。如果你试着 注册after_initialize或 after_find使用宏样式类 方法,他们将被忽略。 此行为是由于性能 原因,因为after_initialize和 将同时调用after_find 在数据库中找到的每条记录, 显着放慢了 查询。