首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.increment vs += 1

.increment vs += 1
EN

Stack Overflow用户
提问于 2012-07-16 14:30:28
回答 3查看 39.7K关注 0票数 41

我有一个包含视图计数(整数)变量的Picture模型。每次有人查看Picture对象时,视图计数都会递增+1。

要做到这一点,两者之间的区别是什么

代码语言:javascript
复制
   @picture.view_count += 1
   @picture.save

代码语言:javascript
复制
   @picture.increment(:view_count, 1)

另外,如果我使用增量,.save是必要的吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-16 14:36:51

increment的源代码如下,如果为nil,则将属性初始化为零,并添加作为传递的值(默认值为1),它不执行保存,因此.save仍然是必需的。

代码语言:javascript
复制
def increment(attribute, by = 1)
  self[attribute] ||= 0
  self[attribute] += by
  self
end
票数 51
EN

Stack Overflow用户

发布于 2015-04-04 06:26:02

在这种情况下,我经常使用counter_cacheincrement_counter

如下所示:

代码语言:javascript
复制
Picture.increment_counter(:view_count, @picture.id)

这种方法比自制方法更简单、更快速。

顺便说一句,ActiveRecord::Councache.也有decrement_counter

http://api.rubyonrails.org/classes/ActiveRecord/CounterCache/ClassMethods.html

票数 30
EN

Stack Overflow用户

发布于 2012-07-16 15:48:04

您应该使用counter_cache。counter_cache帮助您自动增加记录数。

代码语言:javascript
复制
class Picture < ActiveRecord::Base
  has_many :views
end

class View < ActiveRecord::Base
  belongs_to :picture, counter_cache: true
end

图片表格需要名为views_count的列,或者您可以对此列使用自己的名称,例如:

代码语言:javascript
复制
belongs_to :picture, counter_cache: :number_of_views

但我建议您使用views_count作为counter_cache列的默认名称。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11499110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档