我有一个包含视图计数(整数)变量的Picture模型。每次有人查看Picture对象时,视图计数都会递增+1。
要做到这一点,两者之间的区别是什么
@picture.view_count += 1
@picture.save和
@picture.increment(:view_count, 1)另外,如果我使用增量,.save是必要的吗?
发布于 2012-07-16 14:36:51
increment的源代码如下,如果为nil,则将属性初始化为零,并添加作为传递的值(默认值为1),它不执行保存,因此.save仍然是必需的。
def increment(attribute, by = 1)
self[attribute] ||= 0
self[attribute] += by
self
end发布于 2015-04-04 06:26:02
在这种情况下,我经常使用counter_cache和increment_counter。
如下所示:
Picture.increment_counter(:view_count, @picture.id)这种方法比自制方法更简单、更快速。
顺便说一句,ActiveRecord::Councache.也有decrement_counter。
http://api.rubyonrails.org/classes/ActiveRecord/CounterCache/ClassMethods.html
发布于 2012-07-16 15:48:04
您应该使用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但我建议您使用views_count作为counter_cache列的默认名称。
https://stackoverflow.com/questions/11499110
复制相似问题