Rails - 设计sign_up / create后发送用户电子邮件

时间:2013-07-05 01:18:37

标签: ruby-on-rails ruby-on-rails-4

我对rails非常陌生,并试图解决问题。我最近有一个邮件程序所有设置,它工作正常。但我正在尝试为用户操作添加第二个邮件程序,但它似乎无法正常工作。

我想要实现的是用户注册,它向管理员发送电子邮件,然后管理员必须启用该用户。目前,当管理员启用用户时,它将向他们发送电子邮件,但由于某种原因,我新创建的用户电子邮件不会触发。我想这是因为我的创建方法没有触发,我应该把它放在哪里?我是否需要覆盖用户方法?

我的UserMailer控制器:

class UserMailer < ActionMailer::Base
  default from: "website@rnd.designcom.com.au"
  def send_enabled_message(user)
    @user = user
    mail(:to => user.email, :subject => "Welcome to Pixel Technologies!!!")
  end
  def send_new_user_message(user)
    @user = user
    mail(:to => 'ben.suryn@rnd.designcom.com.au', :subject => "New User created please review and enable.")
  end
end

我的users_controller:

class UsersController < ApplicationController
  before_filter :authenticate_user!
  load_and_authorize_resource

# POST /users
def create
  @user = User.new(user_params)
  puts "******************** NEW USER ****************************"
  puts user_params
  if @user.save
    puts 'Sending email for create user'
    UserMailer.send_new_user_message(@user).deliver
    redirect_to @user, notice: 'User was successfully created.'
  else
    render action: 'new'
  end
end

但是这个create方法永远不会被触发。我做错了什么我需要另一种方法来放置UserMailer.send_new_user_message(@user).deliver?

2 个答案:

答案 0 :(得分:57)

应从控制器发送确认电子邮件。覆盖Devise::RegistrationsController默认值很简单。

创建文件app/controllers/my_registrations_controller.rb(根据需要命名)

class MyRegistrationsController < Devise::RegistrationsController

  def create
    super
    if @user.persisted?
      UserMailer.new_registration(@user).deliver
    end
  end

end

然后在你的路线中:

devise_for :users, :controllers => { :registrations => "my_registrations" }

答案 1 :(得分:41)

当用户使用Devise注册时,他们不会通过UsersController

您可能希望在User模型中添加邮件发送代码。

例如,在app/models/user.rb

class User < ActiveRecord::Base
  # ...

  after_create :send_admin_mail
  def send_admin_mail
    UserMailer.send_new_user_message(self).deliver
  end

  # ...
end

这是通过使用Active Record after_create回调来完成的。

相关问题