Rails rails 调用 .save 方法时怎么才能不修改 updated_at 字段?

jeky · 2013年03月17日 · 最后由 jeky 回复于 2013年03月17日 · 3800 次阅读

很多时候,不希望改变修改时间,但是默认 save 方法是自己修改了。 怎么才能不修改,麻烦指点一下,谢谢各位了。

那你要这个字段的目的是?

#1 楼 @guyanbiao 我希望该字段的涵意是:用户修改内容的时间。 但是管理员审核通过的时候,可能会修改 state 状态字段,这个时候调用 save 方法就会改变“修改时间”了。

你可以自己加一个字段啊,在需要更新的时候更新它

管理员审核通过的时候别用 save,用 update_attribute 就不会修改 updated_at 字段

#4 楼 @jan update_column +1 #5 楼 @gs412 update_attribute 会修改 timestamps。

这个只要 google 下就有答案,以前有人给出了比较好的解决办法

在 config/initializers 中新建个文件 save_without_timestamps.rb

module ActiveRecord
  class Base
    def save_without_timestamping
      class << self
        def record_timestamps; false; end
      end
      save
      class << self
        remove_method :record_timestamps
      end
    end
  end
end

然后调用 save_without_timestamping 就可以了

#7 楼 @diudiutang 貌似这个办法是线程不安全的,管理员的操作可能让用户不小心钻了空子 又看了一下,是修改当前对象的 eigenclass,所以在对象不共享的情况下(几乎所有的 AR 使用都是这样)是线程安全的,我刚才说错了

谢谢各位了,最后使用 update_column 处理。今天受益非浅,学到了许多知识!同时,我也感觉自己太浮躁了,我计划系统地学习一下 ruby 和 rails 了!

需要 登录 后方可回复, 如果你还没有账号请 注册新账号