Odpowiedzi:
W ramach implementacji REST w Rails nowe i tworzenie są traktowane inaczej.
HTTP GET /resources/new
to ma na celu renderowanie formularza odpowiedniego do utworzenia nowego zasobu, co robi przez wywołanie nowej akcji w kontrolerze, który tworzy nowy niezapisany rekord i renderuje formularz.
HTTP POST /resources
pobiera rekord utworzony jako część nowej akcji i przekazuje go do akcji tworzenia w kontrolerze, która następnie próbuje zapisać go w bazie danych.
Z dokumentacji ActiveRecord :: Base :
create (atrybuty = zero) {| obiekt | ...}
Tworzy obiekt (lub wiele obiektów) i zapisuje go w bazie danych, jeśli sprawdzanie poprawności przebiegnie pomyślnie. Wynikowy obiekt jest zwracany niezależnie od tego, czy obiekt został pomyślnie zapisany w bazie danych, czy nie.
new (atrybuty = zero) {| self jeśli block_given? | ...}
Nowe obiekty mogą być tworzone jako puste (nie przekazuj parametru konstrukcji) lub wstępnie ustawione z atrybutami, ale jeszcze nie zapisane (przekaż skrót z nazwami kluczy pasującymi do nazw kolumn w tabeli) W obu przypadkach prawidłowe klucze atrybutów są określane przez nazwy kolumn powiązanej tabeli - dlatego nie można mieć atrybutów, które nie są częścią kolumn tabeli.
Tak create
tworzy instancję nowego obiektu, sprawdza go, a następnie zapisuje w bazie danych. I new
tylko tworzy obiekt lokalny, ale nie próbuje sprawdzać poprawności ani zapisywać go w bazie danych.
Nowy tworzy nową instancję modelu, ale nie jest ona zapisywana, dopóki nie zostanie wywołana metoda save.
Utwórz robi to samo co nowy, ale także zapisuje go w bazie danych.
Czasami chcesz coś zrobić przed zapisaniem czegoś w bazie danych, a czasem po prostu chcesz to utworzyć i zapisać od razu.
Części RESTful Railsów są bardzo zbliżone do działania protokołu HTTP. W protokole HTTP żądanie GET nie powinno modyfikować żadnych danych. Logicznie, jeśli spojrzysz na sposób, w jaki działają wszystkie akcje RESTful w Railsach, będą one pasować do akcji HTTP. POST służy do generowania nowych danych, więc jest logicznie tworzony. Używasz GET, aby podać wersję formularza tego lub innymi słowy, nową akcję. Indeks i pokaż są również GET, aktualizacja to PUT (lub PATCH w Railsach 4+), a zniszczenie to DELETE w HTTP.
Ponadto ładnie oddziela logikę w kontrolerze i zapewnia płynny sposób radzenia sobie z błędami (poprzez ponowne renderowanie nowej akcji z komunikatami o błędach).
"You use a GET to serve the form version of that or in other words, the new action"
dzięki za odpowiedź, ale osobiście uważam, że ta konwencja nazewnictwa jest bardzo myląca