Mam formularz z 3 polami ActiveRecord. Jedno z tych pól ma nieco głupkowate i wymagające walidacji wymogi walidacji. (Na przykład sprawdzam tylko pole, jeśli obiekt jest tworzony w formularzu kreatora instalacji).w jaki sposób kontroler może ręcznie ustawić błędy sprawdzania poprawności dla określonego pola
W moim programie obsługi POST do utworzenia obiektu, pomyślałem, że mogę wywołać błędy.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 polecenia @ foo.errors.add() w kontrolerze nie wydaje się wykonywać żadnych czynności ... nie zapobiega zapisywaniu(), jeśli inne pola pomyślnie sprawdzają poprawność.
Alternatywą jest umieszczenie niestandardowej procedury sprawdzania poprawności w modelu ... Wiem, że używanie błędów.add (: pole, 'msg') działa dobrze ... ale w takim przypadku jak mój kontroler może 'przejść' informacje do walidatora informujące o tym, czy pole musi zostać zatwierdzone.
umieścić nonpersisted attrbute od modelu powiedzieć kreatora, ustaw w razie potrzeby, a następnie po prostu użyć go w walidacji nrmal? –