我有一个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。
答案 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