如何在UserMailer中设计用户电子邮件

时间:2013-08-12 11:21:03

标签: ruby-on-rails ruby-on-rails-3 devise actionmailer

我想向刚刚注册的用户发送感谢您的电子邮件,我想我已经把一切都搞定了但不知道怎么也无法在user_mailer.rb中获得注册用户的电子邮件ID。我正在使用devise并使用current_user.email或@ current_user.email给出错误。这是我的代码

#/app/mailers/user_mailer.rb
def welcome (current_user)
  mail(
    :from => "myid@gmail.com",
    :to => current_user.email,
    :subject => "Thank you for signing"
  )
end

#/应用/控制器/ registration_controller.rb

def create
  build_resource

  if resource.valid?
    begin
      resource.transaction do
        resource.save!
      end
    UserMailer.welcome(@current_user).deliver
  end
end

错误我正在

undefined method `email' for nil:NilClass

编辑 - 好吧我终于能够解决它,在控制器中我使用UserMailer.welcome(@current_user).deliver而不是UserMailer.welcome(@user).deliver,现在它是工作,感谢所有帮助过的人

3 个答案:

答案 0 :(得分:3)

请使用我的帖子

https://gist.github.com/rajcybage/6210925

...谢谢

答案 1 :(得分:2)

如果覆盖设计控制器,请使用“resource”方法获取当前用户:

def create
  build_resource(sign_up_params)

  if resource.save
    UserMailer.welcome(resource).deliver
    # some other actions...
  end
end

另外,您可能应该将电子邮件发送代码放在模型回调而不是控制器上吗?

答案 2 :(得分:1)

尝试使用

  @user = User.new(params[:user])
  if @user.save
    set_flash_message :notice, :signed_up if is_navigational_format?
    sign_up(:user, @user)
    UserMailer.welcome(@user).deliver
  else
    clean_up_passwords @user
  end