我怎样才能做到这一点?
试图创建 2 个方法,称为
def disable_timestamps
ActiveRecord::Base.record_timestamps = false
end
def enable_timestamps
ActiveRecord::Base.record_timestamps = true
end
和更新方法本身:
def increment_pagehit
update_attribute(:pagehit, pagehit+1)
end
使用如下回调打开和关闭时间戳:
before_update :disable_timestamps, :only => :increment_pagehit
after_update :enable_timestamps, :only => :increment_pagehit
但它没有更新任何东西,甚至是所需的属性 (pagehit)。
有什么建议吗?我不想为了计算页面点击量而创建另一个表。
最佳答案
作为 update_attribute
的替代方案,在 Rails 3.1+ 中,您可以使用 update_column
。
update_attribute
跳过验证,但会触及 updated_at
并执行回调。
update_column
跳过验证,不触及 updated_at
,并且不执行回调。
因此,如果您不想影响 updated_at
并且不需要回调,update_column
是一个不错的选择。
参见 http://api.rubyonrails.org/classes/ActiveRecord/Persistence.html获取更多信息。
另请注意,update_column
将更新内存模型中的属性值,并且不会将其标记为脏。例如:
p = Person.new(:name => "Nathan")
p.save
p.update_column(:name, "Andrew")
p.name == "Andrew" # True
p.name_changed? # False
关于ruby-on-rails - 如何在不触及 updated_at 属性的情况下更新单个属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4887668/