我应该使用类或实例方法来增加我的对象吗?

时间:2014-11-21 15:11:56

标签: ruby-on-rails ruby-on-rails-4 increment counter-cache

在Rails中增加属性有两种方法:

实例级别:http://apidock.com/rails/ActiveRecord/Base/increment
班级:http://apidock.com/rails/ActiveRecord/Base/increment_counter/class

我想在Post模型上更新一个计数器属性,以保存帖子的评论数量。

对于我的用例,这两个中的任何一个更好吗?

我会将它与PostgreSQL数据库一起使用。

2 个答案:

答案 0 :(得分:2)

出于您的目的,我认为您应该在AR关联中使用:counter_cache之类的属性。例如:

class Comment < ActiveRecord::Base
  # cached value will stored into the comments_count column at posts table
  belongs_to :post, counter_cache: true
end

class Post < ActiveRecord::Base
  has_many :comments
end

Rails会在没有你注意的情况下做很多工作。

对于上面提到的两种方法(increcement_counterincresement),它们用于不同的目的。 increcement_countercounter_cache的背后魔力。 incresement用于增加表中的某个整数值。

答案 1 :(得分:0)

实例 #increment_counter :更多oop,并运行 #update_all (快速且无需验证)。