0

おはようございます、

私がいる現在の状況を回避するための最良の方法を見つけようとしています..次の属性を持つクラスAがありますa、b、c、d

A に対して create が呼び出されると、まず、次のパラメーター a、b、c を持つ A のインスタンスが存在するかどうかを確認します。

データベースをチェックし、必要に応じて作成するために使用している行は次のとおりです。

@foo = A.where(:a => params[:A][:a], :b => params[:A][:b],:c => params[:A][:c]).first_or_create!

クラス A には、a、b、c に対して次の検証があります。

a's length > 3 & < 15
b must be true (checkbox must be checked)
c's length >50 & < 500

ユーザーが空白のフォームを渡すと、上記の行から生成されたエラーが表示されます。コントローラーが検証を満たさないオブジェクト A を作成しようとしたことが原因であると理解しています。

begin rescue endpre-first_or_create!を使用するか、エラー チェックを行うのが最善の方法です。?

4

1 に答える 1

1

begin rescue endモデルに既にあるコードを繰り返さないように、2 つのオプションのほうが優れています。

別のオプションは、first_or_create感嘆符なしで使用することです。これにより、コードでエラーが発生せず、ビューにエラーを表示できます。begin rescue endこれは、レスキュー部分のビューに表示エラーを表示できるため、同等であると言えます。

于 2013-06-26T12:59:27.367 に答える