Чому виникає потреба у визначенні нового методу в контролері RESTful, після чого слід за методом створення?
Пошук у Google не дав мені відповіді, яку я шукав. Я розумію різницю, але потрібно знати, чому вони використовуються такими, якими вони є.
Чому виникає потреба у визначенні нового методу в контролері RESTful, після чого слід за методом створення?
Пошук у Google не дав мені відповіді, яку я шукав. Я розумію різницю, але потрібно знати, чому вони використовуються такими, якими вони є.
Відповіді:
В рамках Rails впровадження REST new і create трактуються по-різному.
HTTP GET to /resources/new
призначений для надання форми, придатної для створення нового ресурсу, що він робить, викликаючи нову дію всередині контролера, що створює новий незаписаний запис і надає форму.
HTTP POST /resources
приймає запис, створений як частину нової дії, і передає його створенню в контролері, яка намагається зберегти її в базі даних.
З ActiveRecord :: Базова документація:
create (attributes = nil) {| об'єкт | ...}
Створює об’єкт (або кілька об'єктів) і зберігає його в базі даних, якщо перевірки проходять. Отриманий об'єкт повертається, вдало збережений об’єкт до бази даних чи ні.
new (attributes = nil) {| self if block_given? | ...}
Нові об'єкти можуть бути ідентифіковані як порожні (не передавати параметр побудови), так і заздалегідь встановлені з атрибутами, але ще не збережені (передайте хеш із іменами ключів, що відповідають асоційованим іменам стовпців таблиці). В обох випадках дійсні ключі атрибутів визначаються іменами стовпців пов'язаної таблиці, отже, ви не можете мати атрибути, які не входять до стовпців таблиці.
Таким чином, create
інстанціює новий об’єкт, перевіряє його, а потім зберігає його в базі даних. І new
лише створює локальний об'єкт, але не намагається перевірити або зберегти його в БД.
Новий екземпляр нового екземпляра Model, але він не зберігається, поки не буде викликаний метод збереження.
Create робить те саме, що і нове, але також зберігає його в базі даних.
Іноді ви хочете робити речі, перш ніж щось зберегти в базі даних, іноді просто хочеться створити і зберегти це відразу.
RESTful частини Rails зроблені дуже близькими до того, як працює протокол HTTP. У протоколі HTTP запит GET не повинен змінювати жодні дані. Логічно, якщо ви подивитесь на те, як працюють усі RESTful дії в Rails, вони будуть відповідати дій HTTP. POST призначений для генерування нових даних, тому він логічно створюється. Ви використовуєте GET, щоб подавати нову дію у формі версії тієї чи іншої мови. Покажчик і шоу також GET, оновлення - PUT (або PATCH в Rails 4+), а знищення - DELETE в HTTP.
Крім того, він чудово розділяє логіку в контролері і дає вам плавний спосіб впоратися з помилками (шляхом повторного відтворення нової дії з повідомленнями про помилки).
"You use a GET to serve the form version of that or in other words, the new action"
дякую за відповідь, але особисто я вважаю, що ця конвенція про іменування дуже заплутана