33

我对 Rails 还很陌生,并试图弄清楚。我最近得到了一个邮件程序的所有设置,它工作正常。但我正在尝试为用户操作添加第二个邮件程序,但它似乎不起作用。

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

我的 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

我的用户控制器:

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?

4

2 回答 2

69

确认电子邮件应从控制器发送。覆盖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" }
于 2014-01-08T04:10:09.860 回答
45

当用户注册 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 Recordafter_create回调来完成的。

于 2013-07-05T01:59:47.393 回答