从Action Mailer上的Railscast放置控制器UserMailer.signup_confirmation(@user).deliver的位置

时间:2014-04-09 18:37:06

标签: ruby-on-rails devise controller actionmailer

我正在关注railscast http://railscasts.com/episodes/61-sending-email-revised,其中声明我应该添加

UserMailer.signup_confirmation(@user).deliver

def create
  @user = User.new(params[:user])
  if @user.save
    redirect_to @user, notice: "Signed up successfully."
  else
    render :new
  end
end
在行if @user.save之后

......但是如果我使用设计怎么办?我是否需要将UserMailer.signup_confirmation(@user).deliver 添加到Devise gem隐藏了相当于users_controller的另一个地方?

1 个答案:

答案 0 :(得分:2)

没有设计

因为,您正在关注Sending Email的RailsCasts剧集,那么在这种情况下,您需要做的就是更新UsersController#create,如下所示:

def create
  @user = User.new(params[:user])
  if @user.save
    UserMailer.signup_confirmation(@user).deliver  ## Add this
    redirect_to @user, notice: "Signed up successfully."
  else
    render :new
  end
end

使用Devise

选项#1发送欢迎确认邮件

您可以在此处执行的操作,覆盖ApplicationController中的after_sign_in_path_for方法,如下所示:

class ApplicationController < ActionController::Base
  ## ...
  protected

  def after_sign_in_path_for(resource)
    UserMailer.signup_confirmation(@user).deliver  ## Add this
    your_path(resource)  ## Replace your_path with the path name where you want to send the user after sign in 
  end
end 

选项#2发送带有确认令牌的欢迎确认邮件

为此,您需要使用Devise内置Confirmable模块。

  

可确认:发送带有确认说明的电子邮件并进行验证   登录时是否已确认帐户。

请参阅 Confirmable Documentation