Adding a Controller without corresponding model while using cancancan
我添加了一个控制器collaborators来管理Users和Companies之间的特定类型的联接关联。问题是,每当我从collaborators加载任何内容时,都会收到错误
uninitialized constant Collaborator
据我了解,这是因为没有模型Collaborator,并且我正在使用cancancan进行授权。从旧的cancan(请注意不是cancancan)文档中,我已经能够收集到没有相应模型的控制器需要为其手动授权的模型,例如:load_and_authorize_resource :the_model, :parent => false。
如果在我的application.rb控制器中禁用load_and_authorize_resource,这似乎起作用。
我的问题是:用cancancan授权没有相应模型的控制器的最佳方法是什么?我可以继续在应用程序控制器中继续load_and_authorize_resource吗?
在此先感谢您。
- 您可能需要编辑问题以确保正确性。您拥有的文档链接说"如果模型的名称与控制器的名称......"而不是" ...",则没有相应模型的控制器需要手动授权模型。 。",作为其他型号名称!=无型号。
此链接会有所帮助。
在链接中,我引用
1 2 3 4 5 6
| class ToolsController < ApplicationController
authorize_resource :class => false
def show
# automatically calls authorize!(:show, :tool)
end
end |
在您的ability.rb中:
1 2 3 4 5 6 7
| class Ability
include CanCan::Ability
def initialize(user)
can :show, :tool
end
end |
- 你是救世主的伙伴。非常感谢。 :)
-
如果Controller不在默认名称空间中,如何调整它?假设您有Admin::ToolsController,应该如何修改can :show, :tool语句?
-
@psychoslave应该基于"下划线",而不是基于" Camelcase"。在rails console中运行'Admin::ToolsController'.underscore。它应该输出:'admin/tools_controller'。因此,您改为使用can :show, 'admin/tools'。尚未验证,但是...我记得这行得通。
-
谢谢,我试图使它适应与我有关的情况,但是我附带的解决方案并不能解决问题。我在stackoverflow.com/questions/61527088/中更详细地介绍了我的具体情况。