jak kontroler może ręcznie ustawić błędy walidacji dla określonego pola

Mam formularz z 3 polami ActiveRecord. Jedno z tych pól ma rodzaj niemądrego, a wymagania walidacji zależne od stanu. (Na przykład sprawdzam poprawność pola tylko wtedy, gdy obiekt jest tworzony w formularzu kreatora konfiguracji).

W moim programie obsługi POST, aby utworzyć obiekt, pomyślałem, że mogę wywołać error.add, aby wstawić specjalny warunek błędu

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

Jednak wykonanie @ foo.errors.add () w kontrolerze nie robi nic ... nie zapobiega zapisywaniu (), jeśli inne pola przechodzą sprawdzanie poprawności.

Alternatywą jest umieszczenie niestandardowego modułu sprawdzania poprawności w modelu ... Wiem, że przy użyciu errors.add (: field, 'msg') działa dobrze ... ale w takim przypadku, w jaki sposób mój kontroler może przekazać informacje do walidatora powiedzenie, czy pole musi zostać zatwierdzone.

questionAnswers(1)

yourAnswerToTheQuestion