ruby-on-rails - 如何在不触及 updated_at 属性的情况下更新单个属性?

标签 ruby-on-rails ruby ruby-on-rails-3

我怎样才能做到这一点?

试图创建 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/

相关文章:

ruby - 如果我要自己释放内存,我应该使用 ALLOCA_N 吗?

ruby-on-rails-3 - 为什么 rake 由于 libpq.5.dylib 而中止

ruby-on-rails - cancancan 自定义操作不起作用

ruby-on-rails - Rails 3. 为什么我的十进制值行是诸如#<BigDecimal :5003750 ,'0.1E2' , 9(18)>> 之类的值?

ruby-on-rails - Rails Restful 操作索引放置

ruby-on-rails - 如何检查将脚本/运行程序作为 shebang 的 ruby​​ 脚本的语法?

ruby-on-rails - 通过关联找到记录

ruby-on-rails - rails 是否可以返回响应并继续处理客户端提交的数据?

ruby-on-rails - 如何简化 Rails 3 中的 "render_to_string"?

mysql - STI MySQL 有趣的 select as with case