Ruby on rails 使用cancancan时确认设备用户时出错

Ruby on rails 使用cancancan时确认设备用户时出错,ruby-on-rails,devise,cancancan,devise-confirmable,Ruby On Rails,Devise,Cancancan,Devise Confirmable,在为用户注册发送的电子邮件中的“确认”链接后会出现以下错误: uninitialized constant Confirmation NameError in Devise::ConfirmationsController#show 但是,如果我通过删除应用程序控制器中的加载和授权资源来关闭Cancancan,则不会发生错误,用户可以成功地遵循确认链接 我已尝试在覆盖的设备控制器中添加跳过\u加载\u和\u授权\u资源,用于确认--用户::确认控制器{:registrations=>“re

在为用户注册发送的电子邮件中的“确认”链接后会出现以下错误:

uninitialized constant Confirmation 
NameError in Devise::ConfirmationsController#show 
但是,如果我通过删除
应用程序控制器
中的
加载和授权资源
来关闭
Cancancan
,则不会发生错误,用户可以成功地遵循确认链接

我已尝试在覆盖的设备控制器中添加
跳过\u加载\u和\u授权\u资源
,用于确认--
用户::确认控制器


根据您的解释,可能性如下:

  • 未初始化常量确认
    的原因可能是它试图使用控制器名称查找与此控制器关联的模型,结果是
    确认
    ,但没有具有该名称的模型
  • skip\u load\u和\u authorize\u资源
    可能无法工作,直到您在重写的控制器本身中有了
    show
    操作(我认为在子类上添加before操作不应该在父类上工作)
  • 我不确定这是否有效,但您可以尝试类似的方法,并在
    应用程序控制器中查看:

    load_and_authorize_resource unless: :devise_controller?
    

    因此,对于所有Desive控制器,这将跳过操作之前的

    是否可以添加更多的stacktrace行?这样我们就可以分析了。谢谢!执行以下操作:设计控制器?工作了,但我改为除非::确认\控制器?因为有些设计控制器需要遵循cancancann的一些规则(在abilities.rb中)——比如更新用户/配置文件。我对你的第一个想法很感兴趣——我希望我能在实际控制员中跳过它。但我在表演中加入了动作,但仍然没有起作用。另外,我在早些时候在另一个Desive控制器中也做了同样的操作(添加了skip_load_和authorize_resource),它绕过了它,而没有在类中定义任何操作。有什么想法吗?只是想确认一下你是否在路由文件中使用了相同的控制器,比如:
    design\u for:users,:controllers=>{:registrations=>“registrations”}
    ,我想在这之后它应该可以工作了。就是这样!将其添加回routes文件后,仅将skip_load_和authorize_资源放在覆盖的ConfirmationController中修复了错误(不需要定义show操作)。非常感谢。