Rob*_*ton 2 activerecord ruby-on-rails
假设我有一个模型,我可能需要在保存之前操纵它的一些属性:
class User < ActiveRecord::Base
attr_accessible :name, :email
# before_validation :set_name_from_email, on: :save
# OR
# before_save :set_name_from_email
def set_name_from_email
self.name ||= email
end
end
Run Code Online (Sandbox Code Playgroud)
如果我必须validates :name, presence: true那么当然这将不得不进入before_validation.但是如果有(现在的代码就是这样)回调没有影响对象有效性的可能性,那么把它放进去更好before_save吗?
如果代码发生变化并且回调现在可能影响有效性,那么让所有数据在一个或另一个桶中操纵回调似乎更为简洁,但是当调用类似的东西时再次运行回调似乎很糟糕.valid?.
任何强烈的意见?
通常我会将所有数据操作放在中,before_save因为在一个地方(保存之前)进行所有数据操作是合乎逻辑的.
但是,如果您将来在名称字段上进行验证(即使数据操作不影响有效性),您应该将数据操作放在a中before_validation,因为您不希望在验证数据x时在数据库中存储数据y .
你可以在这里阅读更多相关信息:http: //bashar3a.com/2011/09/02/activerecord-callback-gotchas-before_save-vs-before_validate/
| 归档时间: |
|
| 查看次数: |
6489 次 |
| 最近记录: |