我正在尝试对我的用户模型执行 ActiveRecord 查询,该模型用于includes
预先加载用户的角色和位置。(一个用户有很多角色并且有很多位置) Location 模型有一个默认范围。这是:
where(:status => [0, 2])
当我使用 执行简单查询时includes
,会应用 Location 模型的默认范围。例如,查询:
User.includes(:roles, :locations)
将在 sql 输出中包含以下内容:
SELECT "locations".*, "t0"."user_id" AS ar_association_key_name FROM "locations" INNER JOIN "locations_users" "t0" ON "locations"."id" = "t0"."location_id" WHERE "locations"."status" IN (0, 2)
但是,稍微复杂一点的查询,例如:
User.includes(:roles, :locations).where(roles: {id: 13})
不应用 Location 默认范围。状态为 的1
位置将包含在用户返回的位置中。
我注意到第一个查询是用多个SELECT
语句执行的,而第二个查询是作为一个SELECT
带有许多JOIN
s 的语句执行的。我怎样才能使它在所有情况下都应用 default_scope ?
我正在使用 Rails 3.2.22。