加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – CanCan:除了MainApp之外的命名空间中的load_a

发布时间:2020-12-16 21:28:19 所属栏目:百科 来源:网络整理
导读:我在我的Rails应用程序中使用CanCan获取权限,我在其中为一些通用表单功能构建了自己的引擎.我想锁定系统中的权限,以便用户无法自由访问我的引擎控制器的操作.这些控制器大多只使用7个REST动作,所以我想在每个控制器的顶部使用CanCan的load_and_authorize_res
我在我的Rails应用程序中使用CanCan获取权限,我在其中为一些通用表单功能构建了自己的引擎.我想锁定系统中的权限,以便用户无法自由访问我的引擎控制器的操作.这些控制器大多只使用7个REST动作,所以我想在每个控制器的顶部使用CanCan的load_and_authorize_resource.

但是,当我像这样编写代码时:

module MyEngine
      class FormController < ApplicationController
        load_and_authorize_resource
        ...
      end
    end

我收到此错误:

uninitialized constant Form

我的猜测是load_and_authorize_resource中的自动加载器与我的MainApp命名空间绑定,并且不识别我在不同的命名空间中调用它,因此调用Form.find(params [:id])而不是MyEngine: :Form.find(PARAMS [:ID]).

如果是这种情况,我该如何解决这个问题?这不是一件大事,因为授权!仍然可以正常工作,所以我可以单独定义每个操作中的授权,但如果我能够使用load_and_authorize_resource方法,它会感觉更清洁.

解决方法

它似乎是CanCan :: ControllerResource#namespace中的一个错误:
def namespace
  @params[:controller].split("::")[0..-2]
end

如您所见,它试图通过::分割控制器路径,但它以my_engine / my_controller的形式出现.

所以修复很简单:

def namespace
  @params[:controller].split("/")[0..-2]
end

想知道他们怎么会错过这么长时间的这种愚蠢的虫子.应该向他们发送拉取请求.

附:刚刚注册回答8)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读