Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 计数所有关联对象并更新计数器_Ruby On Rails_Activerecord - Fatal编程技术网

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