在Rails中有两种增加属性的方法:我应该使用类或实例方法增加我的对象吗?
实例级别:http://apidock.com/rails/ActiveRecord/Base/increment!
类级别:http://apidock.com/rails/ActiveRecord/Base/increment_counter/class
我想更新我的帖子模型上的计数器属性,以保存帖子的评论数量。
对我的用例来说,这两者中的哪一个更好?
我将使用它与PostgreSQL数据库。
在Rails中有两种增加属性的方法:我应该使用类或实例方法增加我的对象吗?
实例级别:http://apidock.com/rails/ActiveRecord/Base/increment!
类级别:http://apidock.com/rails/ActiveRecord/Base/increment_counter/class
我想更新我的帖子模型上的计数器属性,以保存帖子的评论数量。
对我的用例来说,这两者中的哪一个更好?
我将使用它与PostgreSQL数据库。
出于您的目的,我认为您应该在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_counter
和incresement
),它们用于不同的目的。 increcement_counter
是counter_cache
的魔术。 incresement
仅用于增加表中的某个整数值。
实例#increment_counter:更多的空中接力,并运行#update_all(快速,无验证)。
很酷,我假设'counter_cache'列的类型是'integer'? – Numbers 2014-11-21 15:46:55
@数字当然 – achempion 2014-11-21 15:52:55