在 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
它应该发送电子邮件至:
- 门票创建者。
- 添加工单创建者的用户。
但这是我得到的错误:
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
感谢 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
它应该发送电子邮件至:
- 门票创建者。
- 添加工单创建者的用户。
但这是我得到的错误:
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