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

Rails 7下使用Devise实现注册表单提交后跳转指定页面

解决Rails 7中Devise注册后跳转自定义页面的问题

核心问题分析

你之前的代码存在两个关键错误:

  • 自定义的RegistrationController未继承Devise的RegistrationsController,无法复用Devise的注册核心逻辑
  • 手动重写create方法时未正确处理Devise的参数校验与会话逻辑,同时路由未关联自定义控制器

正确实现步骤

1. 修正自定义注册控制器

修改app/controllers/registration_controller.rb,让它继承Devise的注册控制器,并通过Devise提供的回调方法指定跳转路径:

class RegistrationController < Devise::RegistrationsController
  before_action :configure_permitted_parameters, if: :devise_controller?

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys: [:prénom, :nom, :age, :gender, :tel_number])
    devise_parameter_sanitizer.permit(:update, keys: [:prénom, :nom])
  end

  # 注册成功后的跳转路径
  def after_sign_up_path_for(resource)
    accounts_verify_email_path # 对应你定义的路由辅助方法
  end
end

2. 更新路由配置

修改config/routes.rb,让Devise使用你的自定义注册控制器,同时修正视图动作名的大小写(Rails要求动作名必须是蛇形小写):

Rails.application.routes.draw do
  resources :information
  
  # 指定Devise使用自定义注册控制器
  devise_for :accounts, controllers: { registrations: 'registration' }

  root "pages#home"

  devise_scope :account do
    get 'accounts/sign_out' => "devise/sessions#destroy"
  end

  # 修正动作名为小写(符合Rails命名规范)
  get 'accounts/verify_email', to: 'pages#verify_email'
end

3. 确保页面视图存在

确认app/views/pages/verify_email.html.erb视图文件已创建,否则会出现模板找不到的错误。

之前尝试失败的原因

你手动重写create方法时,没有沿用Devise内置的sign_up逻辑,也未正确处理用户会话,加上控制器未继承Devise的注册控制器,导致Devise的默认流程被打乱。使用after_sign_up_path_for是Devise官方推荐的自定义跳转方式,无需重写整个create方法,能更好地兼容Devise的原有功能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 17:52:51