注文のコントローラーで、注文の属性を更新する前に、別のオブジェクトに変更を加えています。
def update
@order.organisation.something = @order.something
@order.organisation.save!
if @order.update_attributes(params[:order])
redirect_to @order
else
render :edit
end
end
理由は、注文が新しい値を受け取る前に組織を更新するために、注文の以前の値 (ここでは「何か」と呼ばれる) が必要だからです。
無効な属性が原因で update_attributes が失敗した場合、組織への変更もロールバックされると予想されますが、明らかにそうではありません。私の質問は、なぜこの変更が「暗黙の」トランザクションの一部ではないのですか? そして、どうすればそれをその一部にすることができますか?