どこで働いているかわからない、無名のエンジニアのわりとどうでもいい日記www

ネットデブリ予定地です。。生暖かい目で今後ともヨロシクwww 技術よりも哲学的な内容が多いですww

Railsのafter_commitの無限ループの罠

Rails5がどうなってるか確認してないが、
Rails4だとafter_commitに恐ろしい罠があり、
after_commit :hoge, :on => :create でhogeメソッド内にupdate処理を行うと無限ループする。

updateじゃなくてcreateなのに無限ループする…。
直観的じゃないからハマりそうなもんなのに、あまりググっても出てこないから書いてみた。
外国人だとstackoverflowでは書いてる人がいた。
stackoverflow.com

データ作成した後で、after_commit内でステータスを変更して、メールを送信する、
みたいなコード書いたら死ぬ\(^o^)/

こんな感じ。本番にリリースすると障害発生((((;゚Д゚))))ガクガクブルブル

after_commit :hoge, :on => :create

def hoge
  self.update(status: "hoge")
  mail.deliver if Rails.env.production?
end