production.log

株式会社リブセンスでエンジニアをやっている星直史のブログです。

ActiveRecordのコールバックにハマったでござる

  1. 無限ループに泣く
class Hoge < ActiveRecord::Base
  before_update :update_hoge!, if: :fuga_changed?
  
  private
  
  def update_hoge!
    hoge = true
    save!
  end
end

Hoge.find(1).update_attributes!(fuga: true)
  1. コールバックが発火しない
class Hoge < ActiveRecord::Base
  before_update :update_hoge!, if: :fuga_changed?
  
  private
  
  def update_hoge!
    hoge = true
    save!
  end
end

Hoge.update_all(fuga: true)

小さな事だけど、結構はまってワロタ。