我有一个包含视图计数(整数)变量的图片模型。每次有人查看图片对象时,查看次数都会增加 +1。
在完成这项工作时,有什么区别
@picture.view_count += 1
@picture.save
和
@picture.increment(:view_count, 1)
另外,如果我使用增量,是否需要 .save?
我有一个包含视图计数(整数)变量的图片模型。每次有人查看图片对象时,查看次数都会增加 +1。
在完成这项工作时,有什么区别
@picture.view_count += 1
@picture.save
和
@picture.increment(:view_count, 1)
另外,如果我使用增量,是否需要 .save?
的来源increment
如下,如果为 nil 则将属性初始化为零并将传递的值添加为 by(默认为 1),它不保存,所以.save
仍然是必要的。
def increment(attribute, by = 1)
self[attribute] ||= 0
self[attribute] += by
self
end
在这种情况下,我经常使用counter_cache
和increment_counter
。
像这样:
Picture.increment_counter(:view_count, @picture.id)
这种方法比自制的方法更简单、更快捷。
顺便说一句,ActiveRecord::CounterCache 也有decrement_counter
.
http://api.rubyonrails.org/classes/ActiveRecord/CounterCache/ClassMethods.html
您应该使用 counter_cache。counter_cache 帮助您自动增加记录数。
class Picture < ActiveRecord::Base
has_many :views
end
class View < ActiveRecord::Base
belongs_to :picture, counter_cache: true
end
图片表需要名称为views_count的列,或者您可以为此列使用自己的名称,例如:
belongs_to :picture, counter_cache: :number_of_views
但我建议您为 counter_cache 列使用默认名称,即 views_count。