小编Sam*_*ake的帖子

我可以在 after_commit(on: :create) 回调中更新活动记录吗?

创建记录后,我会发送一封电子邮件,这是在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
Run Code Online (Sandbox Code Playgroud)

令人惊讶的是(对我来说),这会导致无限的电子邮件发送循环(对不起,Mailgun);看来即使on: :create指定了回调也会在更新时调用。

这种方法有什么我没有看到的问题吗?我还能如何将此值附加到此记录中?

我唯一的想法是尝试对 上的回调进行门控previous_changes,但无论如何我想了解为什么这不能按原样工作。

activerecord ruby-on-rails callback

2
推荐指数
1
解决办法
3200
查看次数

标签 统计

activerecord ×1

callback ×1

ruby-on-rails ×1