使用 cancancan 时确认 Devise 用户时出错

Error when confirming Devise user while using cancancan

在为用户注册发送的电子邮件中确认 link 后出现此错误:

uninitialized constant Confirmation 
NameError in Devise::ConfirmationsController#show 

但是如果我通过删除 ApplicationController 中的 load_and_authorize_resource 来关闭 Cancancan,错误就不会发生并且用户可以成功地遵循确认 link。

我已经尝试在覆盖的 Devise 控制器中添加 skip_load_and_authorize_resource 以进行确认-- Users::ConfirmationsController < Devise::ConfirmationsController

根据您的解释可能是:

  1. uninitialized constant Confirmation的原因可能是它试图通过控制器名称找出与此控制器关联的模型,并且它得到的结果是Confirmation但是没有模型与那个名字.
  2. skip_load_and_authorize_resource 可能无法工作,直到您在覆盖的控制器本身中具有 show 操作(在子 class 上添加前操作不应该在父 class 我觉得)

我不确定这是否有效,但您可以尝试这样的操作,然后在您的 ApplicationController:

中查看
load_and_authorize_resource unless: :devise_controller?

所以这将跳过所有设备控制器的before_action

load_and_authorize_resource不应该用在ApplicationController中,因为它不兼容没有同名型号的设备和控制器。相反,根据需要在每个控制器中设置 load_and_authorize_resource