【发布时间】:2012-04-24 03:57:32
【问题描述】:
我正在尝试通过急切加载一些 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 查询?
【问题讨论】:
-
欢迎堆栈溢出。请记住为所有有用的答案投票,包括对他人问题的回答。请记住检查/批准您自己问题的最佳答案。
标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 cancan eager-loading