Ruby on rails 如何在UserMailer中获取设计用户电子邮件

Ruby on rails 如何在UserMailer中获取设计用户电子邮件,ruby-on-rails,ruby-on-rails-3,devise,actionmailer,Ruby On Rails,Ruby On Rails 3,Devise,Actionmailer,我想向刚刚注册的用户发送感谢电子邮件,我想我已经做好了一切,但不知何故无法在user_mailer.rb中获取注册用户的电子邮件ID。我正在使用designe并使用current_user.email或@current_user.email时出错。这是我的密码 #/app/mailers/user_mailer.rb def welcome (current_user) mail( :from => "myid@gmail.com", :to => current

我想向刚刚注册的用户发送感谢电子邮件,我想我已经做好了一切,但不知何故无法在user_mailer.rb中获取注册用户的电子邮件ID。我正在使用designe并使用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,现在它开始工作了,感谢所有帮助

使用“资源”方法获取当前用户的人,如果您覆盖Desive controller:

def create
  build_resource(sign_up_params)

  if resource.save
    UserMailer.welcome(resource).deliver
    # some other actions...
  end
end
此外,可能您应该将电子邮件发送代码放在模型回调上,而不是控制器上?

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

def create
  build_resource(sign_up_params)

  if resource.save
    UserMailer.welcome(resource).deliver
    # some other actions...
  end
end
此外,可能您应该将电子邮件发送代码放在模型回调上而不是控制器上?

尝试使用

  @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
试用

  @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
请使用我的帖子

谢谢……

请使用我的帖子


谢谢……

你能添加注册控制器创建的完整代码吗?你的当前用户为零,这意味着你没有登录,所以当前用户。电子邮件error@Neo-我已添加完整的code@Rajarshi-是的,看起来确实如此,我添加了完整的代码,在使用当前_user.email之前,我当然会保存资源。我正确地理解了实际错误?:)…谢谢你添加注册控制器创建的完整代码?你的当前用户为零,这意味着你没有登录,因此当前用户。电子邮件应error@Neo-我已添加完整的code@Rajarshi-是的,看起来确实如此,我添加了完整的代码,在使用当前_user.email之前,我当然会保存资源。我正确地理解了实际错误?:)…谢谢我已经添加了完整的控制器代码,我应该把UserMailer.welcome(@current\u user.deliver before resource.save?好的,我把“除非current\u user.nil?…else…”代码放在上面的注释中,电子邮件当然是零,因为我在else部分列出了电子邮件,如何修复此问题以使其使用current_user.email?我已经添加了完整的控制器代码,是否应该将UserMailer.welcome(@current_user.deliver before resource.save)放入?好的,我将“除非current_user.nil?…else…”代码放入上面的注释中,电子邮件当然是零,因为我在else部分列出了电子邮件,我怎样才能解决这个问题,使它占用当前的用户电子邮件?我正在使用Desive并已创建Registrations\u controller.rb文件我不认为我必须再次创建用户对象我正在使用Desive并已创建Registrations\u controller.rb文件我不认为我必须再次创建用户对象这是我自己的注册表这是我自己的要点