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

时间:2015-09-05 11:02:16

标签: ruby-on-rails ruby actionmailer

感谢您阅读这篇帖子。 Rails新手在这里,我非常确定这是一个根本性的错误。

我有一个带有列的用户表' added_by'显示哪个用户将它们添加到数据库中。

User table

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

这是我的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. 添加了故障单创建者的用户。
  3. 但这是我得到的错误:

    undefined method `email' for nil:NilClass
    

    来自这一行:

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

    我很确定我不会在此文件中包含任何内容,但我无法解读其他问题和ruby文档。

    有人可以帮忙吗?

    谢谢你们。

1 个答案:

答案 0 :(得分:2)

如果数据库中的用户不存在added_by(在给定示例中为Thomas的情况),则assoc = User.find_by_id(user.added_by)无法找到关联用户记录assocnil。因此,如果您致电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