1

以前こちらで質問させていただきましたが、3年ぶりです。残念ながら、私たちはまだ Rails 2.3.14 を使用しているので、これは私が現在抱えている問題であり、当時は実際には解決されていませんでした。

私は2つのモデルを持っています...

組織 組織の権限

組織コントローラーの create メソッドでは、Organization の保存と Organizationpermissions オブジェクトを Organization トランザクションにラップしています。

組織がエラーなしで正常に保存されたが、Organizationpermission オブジェクトが失敗した場合、トランザクションは組織オブジェクトを適切にロールバックしません。メソッド new_record? オブジェクトはもう新しくないと考えているため、フォームに更新アクションが強制されますが、これは望ましくありません。

これは09年にここで尋ねられました...

http://bit.ly/MbYGXd

その結果、これは 2.3.5 のバグであることが判明しましたが、それを回避する方法についての回答はありませんでした。

これを回避する方法はありますか?

ありがとう

アップデート:

これを一番上にぶつけようとしているだけです。週末に投稿するべきではなかったかもしれません。:)

ここで何をすべきかまだわかりません。エラーが発生し、それがメイン オブジェクトにない場合、ActiveRecord オブジェクトは new_record に設定されていませんか? ページには作成が反映されなくなり、現在は更新されており、これは間違いなく機能しません。

これを回避する方法があると断言できたのですが、コードのどこにも見つかりません。

4

1 に答える 1

0

同様の問題があり、ネストされた rollback_active_record_state! でコードをラップすると、ブロックすると、期待どおりに機能します。私の場合、トランザクションはafter_createコールバックで失敗していました。

ActiveRecord::Base.transaction do
  @model_a = ModelA.new(params[:model_a])
  @model_b = ModelB.new(params[:model_b])

  @model_a.rollback_active_record_state! do
    @model_b.rollback_active_record_state! do
       @model_a.save!
       @model_b.save!
       ...
    end
  end    

end
于 2012-09-29T13:55:42.057 に答える