gpt4 book ai didi

ruby-on-rails - 无法从 Ruby 中的 Action Mailer 中访问某些方法

转载 作者:数据小太阳 更新时间:2023-10-29 09:02:21 27 4
gpt4 key购买 nike

感谢大家阅读这篇文章。 Rails 新手,我很确定这是一个基本错误。

我有一个用户表,其中有一列“added_by”显示是哪个用户将他们添加到数据库中的。

User table

所以在这个例子中,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 用户记录,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

关于ruby-on-rails - 无法从 Ruby 中的 Action Mailer 中访问某些方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32412313/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com