首页 > 解决方案 > 使用 cancancan 时确认设计用户时出错

问题描述

按照为用户注册发送的电子邮件中的确认链接会出现此错误:

uninitialized constant Confirmation 
NameError in Devise::ConfirmationsController#show 

但是,如果我通过在 中Cancancan删除来关闭,则不会发生错误,并且用户可以成功点击确认链接。load_and_authorize_resourceApplicationController

我尝试skip_load_and_authorize_resource为 Confirmations-- 添加一个覆盖的设计控制器Users::ConfirmationsController < Devise::ConfirmationsController

在此处输入图像描述

标签: ruby-on-railsdevisecancancandevise-confirmable

解决方案


根据您的解释,可能性是:

  1. 原因uninitialized constant Confirmation可能是它试图使用控制器名称找出与此控制器关联的模型,它得到的结果是Confirmation,但没有具有该名称的模型。
  2. skip_load_and_authorize_resource直到您在覆盖的控制器本身中执行操作之前,可能无法正常工作(show我认为在子类上添加之前的操作不应该在父类上工作)

我不确定这是否可行,但你可以尝试这样的事情并在你的ApplicationController

load_and_authorize_resource unless: :devise_controller?

before_action因此,对于所有设计控制器,这将跳过它。


推荐阅读