在我的一个项目中,我使用的是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条件?