我对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?
答案 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
回调来完成的。