Podczas generowania kodu rusztowania tworzona jest metoda new:
def new
@entry = Entry.new
end
Po co tworzony jest nowy obiekt, jesli pozniej przez widok new.rhtml przechodzimy do metody create, ktora tez tworzy nowy obiekt:
Ten obiekt jest używany do wyświetlenia formularza a konkretnie używany przez helpery typu:
text_field :entry, :title
(na przykład, także walidatory i mnóstwo innych rzeczy)
Ponieważ stan pomiędzy requestami nie jest nigdzie zapisywany w metodzie create nie masz już dostępu do obiektu z metody new więc metoda create tworzy nowy obiekt
Dziekuje Ok, juz wszystko jasne. Troche zmylilo mnie to, ze w widoku new.rhtml zostalo wygenerowane:
<%= text_field 'entry', 'title' %>
Przy okazji sprawdzilem, ze dzieki stworzonemu w new obiektowi, podczas renderowania widoku new.rhtml mozliwe jest sprawdzenie, czy obiekt posiada metode okreslona w widoku, np. jak title powyzej. Jesli metoda nie istnieje (np. przez pomylke wpiszemy titlee), generowany jest blad. Bez stworzonego obiektu widok pojawi sie i blad zostanie wygenerowny dopiero po wywolaniu create.
To ma jeszcze tę dobrą własność, że po utworzeniu obiektu w “new” możesz mu nadać pewne domyślne wartości (właściwie najlepiej zrobić to w samym modelu, a nie w kontrolerze) i one wtedy zostaną wyświetlone w formularzu edycyjnym.
Przykład: przeglądasz kategorie i chcesz stworzyć nową książkę. Możesz zrobić tak, że nowa książka od razu ma ustawioną kategorię, w której została wywołana akcja “nowa książka”.