いくつかのSQL呼び出しを熱心にロードして、アプリを高速化しようとしています。管理者の承認を処理するために CanCan gem を使用しています。3 つの異なるロールを持つ Roles テーブルと、多対多のテーブル roles_users があります。ページが CanCan 機能セットで読み込まれるたびに、3 つの個別の SQL クエリが実行されます。
Role Load (0.6ms) SELECT "roles".* FROM "roles" INNER JOIN "roles_users" ON "roles"."id"
= "roles_users"."role_id" WHERE "roles_users"."user_id" = 2 AND "roles"."name" = 'admin'
LIMIT 1
Role Load (0.4ms) SELECT "roles".* FROM "roles" INNER JOIN "roles_users" ON "roles"."id"
= "roles_users"."role_id" WHERE "roles_users"."user_id" = 2 AND "roles"."name" =
'manager' LIMIT 1
Role Load (0.3ms) SELECT "roles".* FROM "roles" INNER JOIN "roles_users" ON "roles"."id"
= "roles_users"."role_id" WHERE "roles_users"."user_id" = 2 AND "roles"."name" = 'user'
LIMIT 1
私は default_scope :include => :roles を User クラスに入れ、 has_and_belongs_to_many 呼び出しに :includes を入れてみました。
1 つの SQL クエリのみを使用するように、Roles テーブルをどこでイーガー ロードできますか?