cancan - 处理巨大的ability.rb文件

时间:2011-06-29 00:59:54

标签: ruby-on-rails ruby-on-rails-3 cancan

我的网站有一个重要的角色方面,我的能力.rb文件已经发展成为一个庞然大物。现在,每次调用load_and_authorize_resource时,它都会执行25次查询以检查“角色”记录。大多数这些查询都是无关紧要的,因为除了与正在使用的控制器相关的权限之外,它们还管理着许多不同的权限。

假设在companies控制器上,我只想检查CompanyProject的权限,我想忽略TaskEmployee ,和Assignment

如何将参数发送到ability.rb,以便每次只执行相关查询?

1 个答案:

答案 0 :(得分:3)

嗯,有一个建议是,你可以为公司和项目定义自己的能力模型。

快速跳跃的东西与使用here的概念相同。

也许您可以分别覆盖公司和项目控制器中的current_ability方法。类似的东西:

def current_ability
  @current_ability ||= CompanyAbility.new(current_user)
end

在您的CompanyAbility模型中,您可以在此处为公司定义自定义权限设置。

希望有所帮助。