1

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 を使用しています。

4

0 に答える 0