更新Rails模型而不触及临时时间戳

时间:2015-07-14 09:42:44

标签: ruby-on-rails ruby-on-rails-4 activerecord

我有一个Tweet模型。我想更新模型属性但不更新时间戳。

我已经阅读/尝试了一些链接,并没有为我工作:

我试图通过在ActiveRecord::Base目录中创建新文件active_record_base_patches.rb来覆盖第二个链接中提到的lib。但是,引擎说在Tweet模型中找不到该方法。

所以,我尝试将update_record_without_timestamping移到Tweet模型。现在找到该方法,但时间戳已更新。

有一些简单的方法可以暂时禁用Rails中的时间戳吗? Laravel 4有这样的东西:https://stackoverflow.com/a/18906324/3427434

PS:我在Ruby 2.2.0上使用Ruby on Rails 4.2.3。

1 个答案:

答案 0 :(得分:2)

您可以在model/concern中创建问题,并使用model_timestamp.rb

命名
require 'active_support/concern'

module ModelTimestamp
  extend ActiveSupport::Concern

  module ClassMethods
    def without_timestamps
      old = ActiveRecord::Base.record_timestamps
      ActiveRecord::Base.record_timestamps = false
      begin 
        yield 
      ensure
        ActiveRecord::Base.record_timestamps = old
      end
    end
  end
end

然后在您的模型中Tweet添加include ModelTimestamp

class Tweet < ActiveRecord::Base
  include ModelTimestamp

  ...
end

然后,在没有timestamps更改使用

的情况下更新属性的位置
tweet = Tweet.last
Tweet.without_timestamps do
  tweet.update(attributes)
end