我有一个继承自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。
非常感谢您提供的任何帮助。已经在这几个小时了。
答案 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
记录。