如何简化此ActiveRecord eager-load查询?

时间:2012-06-04 09:12:31

标签: ruby activerecord eager-loading

在我的一个项目中,我使用的是Ruby ActiveRecord(不是Rails应用程序),我使用以下结构:

class Customer < ::ActiveRecord::Base
  has_and_belongs_to_many :categories
end

class Categories < ::ActiveRecord::Base
  has_and_belongs_to_many :customers
end

在应用程序的一部分中,我加载所有客户来处理它们,并尝试加载其相关类别(在 ActiveRecord :: IdentityMap.use 块中):

Customer.includes(:categories).all

这就是我需要做的事情,但是当我查看生成的eager-load查询时,它的内容如下:

SELECT "categories".*, "t0"."customer_id" AS ar_association_key_name_customer_id
FROM "categories" INNER JOIN "customers_categories" "t0"
ON "categories"."id" = "t0"."category_id" WHERE
((("t0"."customer_id" = 1) OR ("t0"."customer_id" = 2) OR ("t0"."customer_id" = 3) OR ... ))

我正在加载所有客户,无需在连接表上过滤它们。只有几个类别,但许多客户和生成的查询有数千个不需要的OR语句。

有没有办法简化查询(以ActiveRecord方式)不包含customer_id = X形式的WHERE条件?

0 个答案:

没有答案