Dlaczego istnieje potrzeba zdefiniowania nowej metody w kontrolerze RESTful, a następnie zastosowania metody create?
Wyszukiwarka Google nie dostarczyła mi odpowiedzi, której szukałem. Rozumiem różnicę, ale muszę wiedzieć, dlaczego są używane tak, jak są.
ruby-on-rails
rest
sent-hil
źródło
źródło
Z dokumentacji ActiveRecord :: Base :
create (atrybuty = zero) {| obiekt | ...}
new (atrybuty = zero) {| self jeśli block_given? | ...}
Tak
create
tworzy instancję nowego obiektu, sprawdza go, a następnie zapisuje w bazie danych. Inew
tylko tworzy obiekt lokalny, ale nie próbuje sprawdzać poprawności ani zapisywać go w bazie danych.źródło
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.
źródło
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).
źródło
"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