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.