Załóżmy że mam tabelę o nazwie bla_blas w której są dwa pola o nazwie a i b. No i oczywiście model o nazwie BlaBla w którym mam walidacje dla pól a i b. Do tego widok do wprowadzania danych (new.html.erb). Chciałbym przerobić ten widok tak aby powstały dwa widoki - osobny dla pola a (new_a.html.erb) i osobny dla pola b (new_b.html.erb).
Pojawia się problem z walidacją. Jak osobno walidować pole a i pole b.
Czy już przy pierwszym widoku zapisywać dane w tabeli dla pola a ?
Jakie będzie najlepsze rozwiązanie ?
Zależy od tego jak chcesz żeby to działało. Może 2-stopniowy formularz z krokami zmienianymi przez javascript?
Odpowiedz sobie na pytanie: czy potrzebujesz zapisu danych pomiędzy krokami?
BTW podobny temat był ostatnio poruszany: http://rubyonrails.pl/forum/t2879-Multi-step-form. - może coś tam znajdziesz odpowiedniego.
Zapis danych może być po drugim kroku. Chodzi o to żeby walidacja była po pierwszym kroku, ale tylko dla połowy danych (czyli dla pola a)
Ja bym użył :if i :unless przy walidacjach w modelu. Możesz wtedy przekazać do modelu krok, w którym aktualnie model się znajduje i na tej podstawie np. :if => :step1? uruchomi daną waliwację tylko dla kroku 1.
Jest to chyba najprostsze rozwiązanie, ale nie wiem czy to dobrze, żeby model wiedział coś o krokach i formularzach. Dlatego można by też napisać jakąś klasę, która będzie proxy między formą a modelem. Dostanie w argumencie model i będzie miała metody wymagane przez form_for oraz własną implementację valid?, która będzie zwracała odpowiednią wartość w zależności od kroku.