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')を使用すると、そこで正常に機能します...しかし、その場合、コントローラーはどのようにしてバリデーターに情報を「渡す」ことができますかフィールドを検証する必要があるかどうかを通知します。