includes
ユーザーの役割と場所を熱心にロードするために使用する User モデルで ActiveRecord クエリを実行しようとしています。(ユーザーには多くの役割があり、多くの場所があります) 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
最初のクエリは複数のステートメントで実行されるのに対し、2 番目のクエリはSELECT
多くの s を持つ 1 つのステートメントとして実行されることに気付きましたJOIN
。すべての場合に default_scope が適用されるようにするにはどうすればよいですか?
Rails 3.2.22 を使用しています。