Serviceを読んで理解し、同意したものとみなします。スタック・オーバーフローはプログラマーとプログラミングに熱心な人のためのQ&Aサイトです。処理が飛ぶので、例外が起こったとしても処理の流れに違いはないように思います。票1この例だけで言うと、実際に試してみてトランザクションが正常にコミットできていれば、副次的な問題が起きる可能性は低いと思います。以下は余談ですが、例外以外の要因でトランザクションを阻害するケースを考えてみました。問題が起きる可能性がああるのはdoブロック内でreturnしてしまった場合が考えられます。ブロック内でのreturnはブロックを呼び出しているyieldの終了だけでなく、ブロックの呼び出し元の終了も行うためです。ret上記のスクリプトを実行すると以下のようになります。"123"の出力もないし、戻り値が100でなくてブロック内でreturnした200になってるこの例から分るようにブロック内のreturnは結構混乱要因です。ActiveRecord::Base.transactionの実装次第では危険があります。ロールバックendという実装である可能性もあるかもしれません。後者の実装の場合、ActiveRecord::Base.transactionのdoブロックでreturnを使うと、まずコミットされないままトランザクションだけは継続し、同じくdoブロック呼び出し元のコントローラメソッドもおそらく即終了となるため、何らかのDB例外につながると推測できそうです。以下追記ActiveRecord::Base.transactionのソースコードをざっと見てみたところ、ConnectionAdapters::DatabaseStatements#transactionに定義がされています。swallowedendこれだけを見ると、yieldで呼び出されたdoブロックでreturnが使われると果たして動作がどうなるのか分からない感じがします。そもそもこのyieldに到達するための条件すらよく分かりませんが、とにかくこのパスを通過する場合に限っては、doブロック内のreturnは危ないかもしれません。それ以外の場合はActiveRecord::ConnectionAdapters::TransactionStateクラスの#within_new_transactionが処理を行うようです。endendこれを見る限り、ActiveRecordはyieldがreturnで抜けられても、その後ensureブロックにてエラーでチェックを行い、正常ならコミットをしてるっぽいです。このような実装なのでActiveRecordに関しては、一部不明な点がありますが、多分、大体、returnを使っても安全そうです。個の銅バッジありがとうございます。update!した後にすぐさまreturnした場合コミットされているようでした。3:05コメントを読んで、実装確認の内容を追記しました。完全に解明できていませんが、概ね、多分、returnに関しても問題はなさそうですね。|回答スタック・オーバーフローに参加してくれて、ありがとうございます!質問の回答を共有してください。回答を説明し、自分の検討結果も共有してください。意見を述べること(意見を述べるなら、参照リソース、自分の経験で意見をサポートしてください)さらにサポートが必要な場合このヘルプを参考してください。“回答を投稿”をクリックすることで利用規約、プライバシーポリシー、及びクッキーポリシーに同意したものとみなされます。タグが付いた他の質問を参照するか、自分で質問をする。errorが発生しメールが送信できません1railsでcsvファイルを取り込む際に、トランザクションを使いたいです。質問のフィードこのRSSフィードを購読するには、このURLをコピーしてRSSリーダーに貼り付けてください。