Wie kann ein Controller Validierungsfehler für ein bestimmtes Feld manuell festlegen?

Ich habe ein Formular mit 3 ActiveRecord-Feldern. Eines dieser Felder hat eine Art doofe und ZUSTANDSABHÄNGIGE Validierungsanforderungen. (Ich überprüfe das Feld beispielsweise nur, wenn das Objekt in einem Setup-Assistentenformular erstellt wird.)

In meinem POST-Handler zum Erstellen des Objekts dachte ich, ich könnte errors.add aufrufen, um eine spezielle Fehlerbedingung einzufügen

@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)

Das Ausführen von @ foo.errors.add () im Controller scheint jedoch nichts zu bewirken ... es verhindert das Speichern () nicht, wenn die anderen Felder die Validierungen bestehen.

Eine Alternative besteht darin, einen benutzerdefinierten Validierungs-Handler in das Modell einzufügen. Ich weiß, dass die Verwendung von errors.add (: field, 'msg') dort einwandfrei funktioniert Geben Sie an, ob das Feld validiert werden muss.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage