Gya*_*ngh 2 activerecord ruby-on-rails ruby-on-rails-3
我需要覆盖rails(活动记录)update_all方法,以便它始终更新updated_at字段.我该如何实现这一目标?
将以下代码放在一个文件中 /config/initializers/update_all_with_touch.rb
class ActiveRecord::Relation
def update_all_with_touch(updates, conditions = nil, options = {})
now = Time.now
# Inject the 'updated_at' column into the updates
case updates
when Hash; updates.merge!(updated_at: now)
when String; updates += ", updated_at = '#{now.to_s(:db)}'"
when Array; updates[0] += ', updated_at = ?'; updates << now
end
update_all_without_touch(updates, conditions, options)
end
alias_method_chain :update_all, :touch
end
Run Code Online (Sandbox Code Playgroud)
它会:updated_at => Time.now在您使用时自动添加参数update_all.
说明:
此代码段用于alias_method_chain覆盖默认值update_all:
alias_method_chain :update_all, :touch
Run Code Online (Sandbox Code Playgroud)
该方法update_all被update_all_with_touch我定义的方法取代,原始文件update_all被重命名update_all_without_touch.新方法修改upgrades对象以注入更新updated_at,然后调用原始对象update_all.
| 归档时间: |
|
| 查看次数: |
694 次 |
| 最近记录: |