1

我正在尝试对我的用户模型执行 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带有许多JOINs 的语句执行的。我怎样才能使它在所有情况下都应用 default_scope ?

我正在使用 Rails 3.2.22。

4

0 回答 0