Ruby on rails 计数所有关联对象并更新计数器
我有两种型号:Ruby on rails 计数所有关联对象并更新计数器,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我有两种型号: class Products < ActiveRecord::Base has_many :purchases class Purchase < ActiveRecord::Base belongs_to :Product 我可以用ActiveRecord做这个吗?如果没有,我如何使用原始sql来实现这一点呢?您可能应该使用计数器缓存列来提高效率。Rails允许您将所属型号(购买)中的计数器缓存选项设置为true。但您应该生成一个迁移,向products表
class Products < ActiveRecord::Base
has_many :purchases
class Purchase < ActiveRecord::Base
belongs_to :Product
我可以用ActiveRecord做这个吗?如果没有,我如何使用原始sql来实现这一点呢?您可能应该使用
计数器缓存列来提高效率。Rails允许您将所属型号(购买)中的计数器缓存
选项设置为true
。但您应该生成一个迁移,向products
表中添加一列
有关更多信息,请在中查找counter\u cache
如果您不想计算所有关联对象,而是需要传入一个条件,那么您需要一个自定义的计数器缓存。请看一个例子。您可能应该使用计数器\u缓存
列来提高效率。Rails允许您将所属型号(购买)中的计数器缓存
选项设置为true
。但您应该生成一个迁移,向products
表中添加一列
有关更多信息,请在中查找counter\u cache
如果您不想计算所有关联对象,而是需要传入一个条件,那么您需要一个自定义的计数器缓存。请看一个例子。您说您的产品
型号有一个购买计数
,但在您的查询中,您更新了购买
表。@ArunKumar抱歉,修复了您说您的产品
型号有一个购买计数
,但在您的查询中,您可以更新purchases
表。@ArunKumar抱歉,已修复该类型,但我需要添加一个WHERE子句,它不仅仅是计算所有记录。另外,计数器缓存做什么查询,是计数还是递增/递减?@Blankman,啊,你需要一个自定义计数器缓存
。但是我需要添加一个WHERE子句,它不仅仅是计算所有记录。另外,计数器缓存做什么查询,是计数还是递增/递减?@Blankman,啊,你需要一个自定义计数器缓存
。看见
UPDATE products SET purchase_count = (SELECT COUNT(*) from purchases where active=1 and product_id = 123) where id = 123