1

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

这完成了我需要做的事情,但是当我查看生成的即时加载查询时,它看起来像:

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 条件?

4

0 回答 0