gpt4 book ai didi

ruby-on-rails - 调用时未调用 Rails ApplicationMailer 方法

转载 作者:太空宇宙 更新时间:2023-11-03 18:14:27 25 4
gpt4 key购买 nike

我正在尝试使用他们的 ApplicationMailer 机制从 Ruby on Rails v4.2 发送电子邮件。不幸的是,至少在开发环境控制台中,我们创建的 ApplicationMailer 的子类没有调用我们尝试调用的方法:

class RecurringScheduleNotifier < ApplicationMailer
default from: 'notifications@example.com'
def send_schedule_reminder(student)
logger.debug('This never gets called :(')
send_schedule_reminder_email(student, student.email).deliver
end
def send_schedule_reminder_email(user, email)
mail(to: email, subject: 'Test subject')
end
end

class Student < ActiveRecord::Base
def self.send_emails
Student.all.each do |student|
logger.debug('This does get called')
RecurringScheduleNotifier.send_schedule_reminder(student)
logger.debug('This also get called')
end
end
end

如果我直接在控制台中运行邮件程序,它会正常发送电子邮件:

RecurringScheduleNotifier.send_schedule_reminder(Student.first)

所有 3 个记录器消息都按预期输出并发送了电子邮件。但是,如果我从控制台调用 Student 类方法,这将不起作用:

Student.send_emails

我没有收到任何错误消息,但只输出了 Student 类中的 2 条记录器消息。 RecurringScheduleNotifier 中的记录器消息根本没有输出!

我错过了什么?这很奇怪,因为所有 Student.send_emails 真正做的是为每个学生调用 RecurringScheduleNotifier.send_schedule_reminder(目前我的开发环境中只有 1 个)。直接对该学生调用 RecurringScheduleNotifier.send_schedule_reminder 效果很好。

最佳答案

当您调用邮件程序方法时,该方法返回一个 ActionMailer::MessageDelivery。您必须调用 deliver_nowdeliver_later 才能发送电子邮件。

所以在你的情况下,在你的用户模型中,调用...

RecurringScheduleNotifier.send_schedule_reminder(student).deliver_later

...应该可以解决问题。

不过,我不确定您的邮件程序中是否有两种方法。您可能想将它们合并为一个。喜欢:

def send_schedule_reminder(student)
@student = student
logger.debug('This never gets called :(')
mail(to: student.email, subject: 'Test subject')
end

关于ruby-on-rails - 调用时未调用 Rails ApplicationMailer 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28441551/

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