gpt4 book ai didi

actionmailer - 事件作业 - 如何取消预定的 Action Mailer 作业?

转载 作者:行者123 更新时间:2023-12-01 10:36:10 34 4
gpt4 key购买 nike

我使用延迟作业作为事件作业的排队后端。我还没有设置任何自定义作业并计划使用 Action Mailer 到 send out scheduled emails异步。如何防止发送预定的电子邮件?

例如,假设用户可以在我的应用程序上设置电子邮件提醒。如果用户设置了 future 三天的提醒,则会创建一个作业。如果用户删除该电子邮件提醒,则应删除该作业。

任何帮助将不胜感激!

最佳答案

我决定以不同的方式解决这个问题。我只是简单地安排工作,而不是安排工作并销毁它。

当用户设置 future 三天的提醒时,就会像以前一样创建一个作业。如果用户删除电子邮件提醒,该作业仍将在三天内运行,但不会执行任何操作。这是一个示例设置:

# controllers/users_controller.rb

def schedule_reminder
# Get the user that scheduled the reminder
user = User.find_by_id(params[:id])

# Create a reminder for the user
reminder = user.reminders.create(active: true)

# Schedule the reminder to be sent out
SendReminderJob.set(wait_until: 3.days.from_now).perform_later(reminder.id)
end

def unschedule_reminder
reminder = Reminder.find_by_id(params[:reminder_id])

reminder.destroy
end

当用户安排提醒时, def schedule_reminder被执行。此方法会创建提醒并安排将在 3 天内运行的作业。它将提醒的 ID 作为参数传递,以便作业可以在运行时检索提醒。

当用户删除提醒时, def unschedule_reminder被执行。此方法找到提醒并将其删除。

这是我的 SendReminderJob工作看起来像:
# jobs/send_reminder_job.rb

class SendReminderJob < ActiveJob::Base
queue_as :default

def perform(*args)
# Get the reminder
# args.first is the reminder ID
reminder = Reminder.find_by_id(args.first)

# Check if the reminder exists
if !reminder.nil?
# Send the email to the user

end
end
end

当此作业在三天内运行时,它会检查是否仍设置提醒。如果是,它会向用户发送一封电子邮件。否则,它什么都不做。不管它有没有做任何事情,三天后这个作业就被删除了!

关于actionmailer - 事件作业 - 如何取消预定的 Action Mailer 作业?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35024501/

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