我正在运行问答服务。管理员可以做的一件事是将问题标记为离题。当他们这样做时,会向提出问题的人发送一封电子邮件,告诉他们他们的电子邮件偏离主题。
电子邮件通知通过delayed_job 发送:
QuestionMailer.delay.notify_asker_of_offtopic_flag question
但是,有时有人可能会不小心将问题标记为离题或改变主意。为了避免向最初询问它的人发送不正确的通知,我想创建一个短暂的延迟,并在邮件请求运行时评估问题是否仍然是题外话:
延迟致电邮寄者:
QuestionMailer.delay(run_at: Time.now + 3.minutes).notify_asker_of_offtopic_flag(question)
邮寄者:
class QuestionMailer
...
def notify_asker_of_offtopic_flag question
if question.offtopic?
# do mailing
end
end
end
不幸的是,这并不是那么简单,因为该if
块只会导致一个错误,然后导致 delay_job 一次又一次地重试该作业。
我现在正在尝试一些非常迂回的方法来达到同样的目的,但我真的很想找到一些方法来中止QuestionMailer
操作而不触发错误。这可能吗?