【发布时间】:2014-02-23 23:11:45
【问题描述】:
创建记录后,我会发送一封电子邮件,这会在after_commit 回调中进行。我想将电子邮件的Message-Id 标头保存为记录中的属性以供以后使用。我将其实现为:
after_commit on: :create do
if email = Mailer.email(self).deliver
# `self.message_id = email.message_id` has no effect, so I'm calling update()
self.update message_id: email.message_id
end
end
令人惊讶的是(对我来说),这会导致无限的电子邮件发送循环(对不起,Mailgun);似乎在更新时调用了回调即使指定了on: :create。
我没有看到这种方法有什么问题吗?我还能如何将此值附加到此记录?
我唯一的想法是尝试gating the callback on previous_changes,但无论如何我想了解为什么这不能按原样工作。
【问题讨论】:
-
我想到比
previous_changes更简单的方法是仅在message_id尚未设置时才发送电子邮件。这可能会起作用,但我仍然感到困惑,为什么它不能按原样工作。
标签: ruby-on-rails activerecord callback