読者です 読者をやめる 読者になる 読者になる

odeの開発メモ日記

プログラマーやってます。今までの道のり ポケコンbasic→C(DirectX5 ネットやろうぜ)→Perl(ちょろっと)→Java→C#→Ruby→Android(Java)

ActiveRecordのコールバックでのトランザクション

下記のようにUserを作成した際に
コールバックでLogを自動的に作る場合において
トランザクションの範囲がどうなるかが気になった。

def class User
  def after_create
    UserLog.new.save!
  end
end

実行結果ログ

SQL (0.000301) BEGIN
User Create (0.000586) INSERT INTO ...
UserLog Create (0.000422) INSERT INTO ...\
SQL (0.002717) COMMIT

まとめ

問題なくコールバックで作ったデータもトランザクションの範囲にしてくれた。
単純に1レコード保存する場合でも毎回トランザクションを作ってくれてるみたい。

実行環境

rails2.1.1
mysql