自定义邮件程序未定义方法

时间:2014-12-16 04:26:15

标签: ruby-on-rails devise actionmailer mandrill

我有一个继承自Devise的自定义邮件程序。

这是我的控制器:

class RegistrationsController < Devise::RegistrationsController
 def create
  super
  if @user.persisted?
   CustomMailer.new_registration(self).deliver
  end
 end
end 

这是邮件:

class CustomMailer < Devise::Mailer   

def new_registration(user)
 @user = user
 mandrill_mail(
  template: 'New User Welcome',
  to: @user.email,
  vars: {
    'USER_FIRST_NAME' => user.first_name,
  },
  important: true,
  inline_css: true,
  async: true
 )
 end
end

我觉得我已经尝试了所有可能性,但总是得到像这样的NoMethodError:未定义的方法`email'为nil:NilClass

因为某些原因,我的邮件程序无法访问我的模型......

我正在使用Rails 4和Devise 3.2.4,如果这有什么不同,以及Mandrill Mailer。

非常感谢您提供的任何帮助。已经在这几个小时了。

1 个答案:

答案 0 :(得分:0)

当您需要通过self时,您已在RegistrationsController中传递@user

class RegistrationsController < Devise::RegistrationsController
 def create
  super
  if @user.persisted?
   CustomMailer.new_registration(@user).deliver
  end
 end
end
在这种情况下,

self是控制器的实例,而不是邮件程序中所需的User记录。