1

我想向刚刚注册的用户发送感谢电子邮件,我想我一切都做对了,但不知何故无法在 user_mailer.rb 中获取注册用户的电子邮件 ID。我正在使用设计并使用 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

#/app/controllers/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,现在它正在工作,感谢所有帮助过的人

4

3 回答 3

3

请使用我的帖子

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

谢谢....

于 2013-08-13T03:58:20.467 回答
2

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

def create
  build_resource(sign_up_params)

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

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

于 2013-08-12T11:37:08.897 回答
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
于 2013-08-12T11:39:35.143 回答