トランザクションは不可分な処理をまとめるので、
ActiveRecord::Base.transaction do
A.save!
B.save!
C.save!
end
は、順番を変えて
ActiveRecord::Base.transaction do
C.save!
B.save!
A.save! # <= save!と書いたがロングラニング特有のWeb API操作と考える
end
としても最終的に同じことである。本当のソースはこれほど簡略化できないので同じことではないことも多いが、入れ替えても同じである場合、柔軟に入れ替えることで、エラーになりそうな所を早めにsave!
で確認して無駄な後続処理をしなくて済むようにしたり、その逆に、エラーになりそうなところは最後まで処理をしないで、失敗したら巻き戻すなどのテクニックが使える。後者は、ロングラニングトランザクションで有効といえそうである。