我正在尝试在我的用户模型上执行ActiveRecord查询,该模型使用includes
来加载用户的角色和位置。 (用户有很多角色并且有很多位置)
Location模型具有默认范围。它是:
where(:status => [0, 2])
当我使用includes
执行简单查询时,将应用位置模型的默认范围。例如,查询:
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})
不应用位置默认范围。状态为1
的地点将包含在用户返回的位置中。
我注意到第一个查询是使用多个SELECT
语句执行的,而第二个查询是作为一个SELECT
语句执行的,其中包含许多JOIN
个语句。如何在所有情况下应用default_scope?
我使用的是Rails 3.2.22。