0

私の Rails アプリでは、コントローラーの create アクションにトランザクション ブロックがあり、そこで 2 つのレコードを作成しようとしています。

def create
  ActiveRecord::Base.transaction do
    @foo = Foo.new(params[:foo].except(:bar))
    raise ActiveRecord::Rollback unless @foo.save
    @bar = Bar.new(params[:foo][:bar])
    raise ActiveRecord::Rollback unless @bar.save
  end
end

どの保存が失敗したかを示すエラーを返すことができるように、ロールバックからレスキューできるようにしたいと考えています。

rescue ActiveRecord::Rollback => e
  @foo.errors = e if @foo.errors.blank?
ensure
  respond_with @foo
end

しかし、レスキューブロックに入ることはありません。これは、Rails のドキュメントに記載されているように、トランザクション ブロックが Rollback 例外を食べて、それを再発生させないためだと思います。この例外を強制的に再発生させる方法はありますか?

4

0 に答える 0