感谢您阅读这篇帖子。 Rails新手在这里,我非常确定这是一个根本性的错误。
我有一个带有列的用户表' added_by'显示哪个用户将它们添加到数据库中。
所以在这个例子中,由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
应发送电子邮件至:
但这是我得到的错误:
undefined method `email' for nil:NilClass
来自这一行:
mail(to: assoc.email, subject: title, from: ticket.reply_from_address)
我很确定我不会在此文件中包含任何内容,但我无法解读其他问题和ruby文档。
有人可以帮忙吗?
谢谢你们。
答案 0 :(得分:2)
如果数据库中的用户不存在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