【问题标题】:Action Mailer 'undefined method `[]' for nil:NilClass'Action Mailer 'undefined method `[]' for nil:NilClass'
【发布时间】:2019-01-07 16:02:28
【问题描述】:

我在尝试发送电子邮件时遇到错误。不知道为什么,但这是我的控制器和邮件程序中的代码

下面是我的控制器代码

class Invitation::InvitesController < ApplicationController

def invite_provider
      @patient = Patient.find_by_id(invite_params[:invitable_id])
      recipient = params[:email]
      InviteMailer.provider_invite(recipient).deliver_now
      flash[:success] = "An email has been sent to"
      redirect_back(fallback_location: root_path)
    end

end

这是我的邮件代码

class InviteMailer < ApplicationMailer
def provider_invite(recipient)
    @recipient = recipient
    mail(
      to: recipient[:email],
      subject: I18n.t('provider_invite_subject')
    )
  end
end

【问题讨论】:

  • 您的电子邮件参数为空

标签: ruby-on-rails ruby actionmailer


【解决方案1】:

在调用mail 时,在to 选项中,您基本上是在发送params[:email][:email]。我不认为那是你想要的。

recipient = params[:email]

然后

to: recipient[:email],

【讨论】:

    【解决方案2】:

    您已调用InviteMailer.provider_invite(recipient),其中收件人是控制器内部的email

    您可以在控制器中更改,

    InviteMailer.provider_invite(email: recipient)
    

    然后,

    class InviteMailer < ApplicationMailer
      def provider_invite(attr)
        @recipient = attr[:email]
        mail(
          to: @recipient,
          subject: I18n.t('provider_invite_subject')
        )
      end
    end
    

    错误是由于您的参数没有电子邮件密钥,因此收件人为零通过控制器传递

    【讨论】:

    • 谢谢!这让错误消失了,但它没有发送到我输入的电子邮件。这是我得到的输出“来自:notgoingtosay@gmail.com 到:电子邮件”
    猜你喜欢
    • 2015-04-15
    • 1970-01-01
    • 2013-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-28
    • 2015-03-19
    相关资源
    最近更新 更多