!
Railsの一部のメソッドは、無効な場合に演算子を使用して例外を発生させることに気づきました。例えば、User.create!
なぜ、いつこのようなものを使いたいのですか?
ありがとう。
!
Railsの一部のメソッドは、無効な場合に演算子を使用して例外を発生させることに気づきました。例えば、User.create!
なぜ、いつこのようなものを使いたいのですか?
ありがとう。
さまざまな理由で例外が必要になる可能性があります
begin ... rescue ... end
それをより明確にします。エラー状態の数が少なく、呼び出しの直後に完全に処理される場合は、例外ではなくステータス フラグを使用する十分な理由があります。しかし、すべてのテクニックにはその場所と時間があります。
ところで、save
メソッドは内部的に を呼び出しsave!
、潜在的な例外を処理し、存在する場合は false を返します。実装のコードを参照してください。
トランザクションがアクティブなときに例外がスローされると、ActiveRecord はトランザクションをロールバックします。
したがって、例外をスローするメソッドは、例外的な状況が発生したときにデータベースがトランザクションをコミットしないようにするのに適しています。自分で問題を「処理」できる場合、または実際に問題がない場合は、 を使用せずにバリアントを使用し、!
エラー状態の戻り値をチェックして、自分で処理できます。
次のような特定の場合User.create
:
User.create
メソッドを使用して、ユーザーが指定したユーザー名がまだ選択されていないかどうかを判断し、別の名前が既に使用されている場合は、ユーザーが別の名前を選択するように求めるプロンプトを表示できます。User.create!
最終的に要求を送信するときにこのメソッドを使用すると、ユーザーがフレンドリ名チェックをバイパスしようとした場合に、整合性チェックでトランザクションの作成とロールバックが失敗する可能性があります。