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操作)。非常感谢。