3つのActiveRecordフィールドを持つフォームがあります。これらのフィールドの1つには、グーフィーやSTATE-DEPENDENT検証要件があります。 (たとえば、オブジェクトがセットアップウィザードのフォームで作成されている場合にのみフィールドを検証します)コントローラーはどのようにして特定のフィールドの検証エラーを手動で設定できますか
オブジェクトを作成するPOSTハンドラで、errors.addを呼び出して特別なエラー条件を挿入できると考えました
@foo = Foo.new(params[:foo])
if goofy_conditions(params[:foo][:goofy_field])
@foo.errors.add(:goofy_field, "doesn't meet the goofy conditions")
end
respond_to do |format|
if @foo.save
...
else
... redirect back to form (with error fields hilited)
しかし、コントローラで@ foo.errors.add()を実行しても何も起こっていないようです...他のフィールドが検証をパスすると、save()を防ぐことができません。
代替案は、モデルにカスタム検証ハンドラを置くことです...私はerrors.add(:field、 'msg')フィールドを使って正しく動作しますが、 infoをバリデーターに渡して、フィールドの検証が必要かどうかを指示します。
は、ウィザードを言って、モデルにセットをnonpersisted attrbuteを置きます必要に応じてnrmal検証に使用します。 –