ruby-on-rails - 使用 cancancan 时确认设计用户时出错
问题描述
按照为用户注册发送的电子邮件中的确认链接会出现此错误:
uninitialized constant Confirmation
NameError in Devise::ConfirmationsController#show
但是,如果我通过在 中Cancancan
删除来关闭,则不会发生错误,并且用户可以成功点击确认链接。load_and_authorize_resource
ApplicationController
我尝试skip_load_and_authorize_resource
为 Confirmations-- 添加一个覆盖的设计控制器Users::ConfirmationsController < Devise::ConfirmationsController
。
解决方案
根据您的解释,可能性是:
- 原因
uninitialized constant Confirmation
可能是它试图使用控制器名称找出与此控制器关联的模型,它得到的结果是Confirmation
,但没有具有该名称的模型。 skip_load_and_authorize_resource
直到您在覆盖的控制器本身中执行操作之前,可能无法正常工作(show
我认为在子类上添加之前的操作不应该在父类上工作)
我不确定这是否可行,但你可以尝试这样的事情并在你的ApplicationController
:
load_and_authorize_resource unless: :devise_controller?
before_action
因此,对于所有设计控制器,这将跳过它。
推荐阅读
- grails - Grails 2.4.4 - 如何从 Groovy 类重定向(非控制器)
- c++ - 为什么“const auto [x, y]”在绑定到引用类型时表现不如预期?
- java - Java 中的 SAP GUI 脚本
- java - 在 Eclipse 中连接到 derby 数据库
- javascript - 在 axios get 中出现未定义的错误
- python-3.x - 从 cmd (python 3.6.5) 执行 python 脚本时找不到内置模块
- reactjs - 为了可读性,将 defaultProps 放在无状态组件定义之前
- python - 在 Python 中确定字符串的编码
- c# - c# microsoft.graph SDK 将消息复制到另一个邮箱
- php - 如何在路由中选择一个 id 将其传递到控制器并针对该 id 获取数据并在 laravel 5.6 中再次重定向它