You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails无法覆盖Devise Passwords Controller,密码路由缺失

解决Devise密码路由缺失问题

以下是排查和修复的具体步骤:

1. 确认User模型包含:recoverable模块

Devise的密码重置相关路由完全依赖模型中的:recoverable模块,如果你的User模型没添加这个模块,Devise不会生成任何密码相关路由。检查app/models/user.rb,确保配置包含:recoverable:

class User < ApplicationRecord
  devise :database_authenticatable, :registerable,
         :recoverable, # 必须添加这个模块
         :rememberable, :validatable
end

2. 修正控制器文件路径

你的控制器类是User::PasswordsController(单数命名空间),对应的文件路径应该是app/controllers/user/passwords_controller.rb,而不是你当前的users/passwords_controller.rb(复数目录)。Rails自动加载规则是:命名空间User::对应单数目录user/,如果目录名是复数users/,Rails无法正确识别控制器,会导致路由无法绑定,进而不生成对应路由。

3. 清除路由缓存并重启服务

修改路由和控制器后可能存在缓存问题,执行以下命令清除路由缓存:

rails routes:clear

然后重启Rails服务器,再执行rails routes查看是否生成了密码路由。

4. 排查路由冲突

确认你的devise_for配置没有添加skip: [:passwords]这类跳过密码路由的设置,当前路由配置看起来无问题,但要确保没有其他代码覆盖或修改了Devise的默认路由规则。

完成以上步骤后,应该能看到类似如下的密码相关路由:

new_user_password GET    /users/password/new(.:format)  user/passwords#new
edit_user_password GET    /users/password/edit(.:format) user/passwords#edit
     user_password PATCH  /users/password(.:format)      user/passwords#update
                   PUT    /users/password(.:format)      user/passwords#update
                   POST   /users/password(.:format)      user/passwords#create

内容的提问来源于stack exchange,提问作者Anon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 04:40:36