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

如何使用Devise实现用户注册完成后自动发送欢迎邮件

问题根因

  1. 自定义的RegistrationsController未生效:从请求日志可以看到,注册的POST请求是由默认的Devise::RegistrationsController处理的,你编写的控制器代码根本没有被调用。
  2. 控制器create方法逻辑错误:即便控制器生效,现有代码也无法正常触发邮件发送:
    • Devise默认的create方法执行后会直接返回重定向,写在super后面的代码不会被执行
    • 你手动新实例化的@user = User.new(user_params)不是实际已注册成功的用户对象,完全没有必要单独创建

解决方案

第一步:修改路由配置指向自定义控制器

打开config/routes.rb,修改devise路由配置:

devise_for :users, controllers: { registrations: 'registrations' }

第二步:修正注册控制器的create方法逻辑

class RegistrationsController < Devise::RegistrationsController
  def create
    # 块内逻辑仅在用户创建成功后执行,避免创建失败时还尝试发邮件
    super do |resource|
      UserMailer.welcome_email(resource).deliver_now if resource.persisted?
    end
  end

  private
  def after_sign_up_path_for(resource)
    static_pages_welcome_path
  end

  def user_params
    # 注意你请求参数里有role_names,有需要的话补充到permit列表里
    params.require(:user).permit(:email, :password, :password_confirmation, :broker, :buyer, :status, role_names: [])
  end
end

改完重启服务测试即可,配置正确的情况下注册成功就会触发欢迎邮件发送。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 08:54:03