【问题标题】:Custom Mailer Undefined Method自定义邮件程序未定义方法
【发布时间】:2015-02-14 08:15:09
【问题描述】:

我有一个继承自 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:undefined method `email' for nil:NilClass

所以由于某种原因,我的邮件程序无法访问我的模型...

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

您能提供的任何帮助将不胜感激。已经研究了几个小时了。

【问题讨论】:

    标签: ruby-on-rails devise actionmailer mandrill


    【解决方案1】:

    当您需要传递 @user 时,您正在传递 self 中的 RegistrationsController

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

    self 在这种情况下是控制器的一个实例,而不是您在邮件程序中需要的 User 记录。

    【讨论】:

      猜你喜欢
      • 2012-01-21
      • 2012-08-01
      • 2012-07-03
      • 2015-06-23
      • 1970-01-01
      • 2013-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多