在 Ruby 中无法从 Action Mailer 中访问某些方法

Trouble accessing certain methods from within Action Mailer in Ruby

感谢 post 朋友们的阅读。 Rails 新手,我很确定这是一个基本错误。

我有一个用户 table,其中有一列 'added_by' 显示哪个用户将他们添加到数据库中。

所以在这个例子中,Melissa (id:2) 是由 Thomas (id:1) 添加的。

这是我的 Actionmailer notification_mail.rb,它会在创建工单时发送电子邮件:

class NotificationMailer < ActionMailer::Base

add_template_helper HtmlTextHelper

def new_ticket(ticket, user)
    unless user.locale.blank?
      @locale = user.locale
    else
      @locale = Rails.configuration.i18n.default_locale
    end
    title = I18n::translate(:new_ticket, locale: @locale) + ': ' + ticket.subject.to_s

add_attachments(ticket)

unless ticket.message_id.blank?
  headers['Message-ID'] = "<#{ticket.message_id}>"
end

@ticket = ticket
@user = user
assoc = User.find_by_id(user.added_by)
mail(to: user.email, subject: title, from: ticket.reply_from_address) #sends email to ticket creator
mail(to: assoc.email, subject: title, from: ticket.reply_from_address) #sends email to user who added ticket creator

end

它应该发送电子邮件至:

  1. 门票创建者。
  2. 添加工单创建者的用户。

但这是我得到的错误:

undefined method `email' for nil:NilClass

来自这一行:

mail(to: assoc.email, subject: title, from: ticket.reply_from_address)

我很确定这与我有关,不包括此文件中的内容,但尽管阅读了其他问题和 ruby 文档,我还是无法弄清楚。

有人可以帮忙吗?

谢谢大家。

如果数据库中的用户不存在 added_by(在您给出的示例中 Thomas 就是这种情况),则 assoc = User.find_by_id(user.added_by) 将找不到关联用户记录assoc 将是 nil。因此,如果您调用 assoc.email,它将失败并显示以下消息:

undefined method `email' for nil:NilClass

或者,您可以这样做:

assoc.try(:email)

或者,您可以先检查 assoc 是否存在,然后才向他们发送电子邮件:

if assoc && assoc.email
  #sends email to user who added ticket creator
  mail(to: assoc.email, subject: title, from: ticket.reply_from_address) 
end