我试图通过急切加载一些 sql 调用来加速我的应用程序。我正在使用 CanCan gem 来处理我的管理员授权。我有一个包含三个不同角色的角色表和一个多对多表角色_用户。每次使用 CanCan 功能集加载页面时,它都会执行三个单独的 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 类中,并将 :includes 放在 has_and_belongs_to_many 调用中。
我在哪里可以急切加载 Roles 表以仅使用 1 个 SQL 查询?