web-dev-qa-db-ja.com

ActiveRecordトランザクションでのエラー処理?

チケットとユーザーテーブルの両方に行を作成する必要があります...トランザクションが失敗した場合の処理​​方法を知る必要があります。

@ticket.transaction do
    @ticket.save!
    @user.save!
end
    #if (transaction succeeded)
        #.....
    #else (transaction failed)
        #......
    #end

余談ですが、デザイナーがより多くのプログラミングを学ぶのを助けるためにスタックオーバーフローに参加するすべての人に感謝したいと思います...皆さんがこのようなn00b質問に答えるためにあなたの一日を割いてくれたことに感謝します:)

39
Kevin

保存を使用している場合! bang(感嘆符)を使用するメソッドでは、保存が失敗したときにアプリケーションが例外をスローします。失敗を処理するには、例外をキャッチする必要があります。

begin
  @ticket.transaction do
    @ticket.save!
    @user.save!
  end
  #handle success here
rescue ActiveRecord::RecordInvalid => invalid
   #handle failure here
end
59
MattMcKnight

私も初心者ですが、@ ticket.errorsと@ user.errorsをチェックして、その応答に応じて検証できると思います

また、saveメソッドは、保存が成功したかどうかを決定するブール値を返す必要があります

0
mportiz08