Ресурсы: почему new и create имеют разные пути?

Рейтинг: 1Ответов: 2Опубликовано: 10.04.2015

Есть контроллер ArticlesController.

Есть ресурс articles.

Почему articles#new соответствует запрос GET /articles/new, а articles#create соответствует запрос POST /articles? Почему не POST /articles/new?

Ответы

▲ 2Принят

GET /articles/new - это, строго говоря, не является представлением ресурса (resource representation). Страничка, которая отдается по этому пути, нужна человеку. Он её заполнит и сможет сделать POST /articles. Машине, например, такая помощь не нужна, поэтому в каком-нибудь API такого роута просто не будет.

Почему делается POST /articles, а не POST /articles/new? Потому что такая конвенция.

Почему делается GET /articles/new, а не GET /articles (например)? Потому что GET /articles уже используется для списка статей. Вместо new можно было бы, конечно, использовать и другое слово. Например, build или еще что-нибудь. Но new тоже звучит неплохо и это как бы тоже конвенция уже.

▲ 2

Потому что POST запрос используется для отправки определенного объекта и url /articles нужен для идентификации ресурса Article.rb в ActionDispatch.

A GET /articles/new нужен для того, чтобы получить от сервера требуемую отрендеренную вьюху. И если внимательно посмотрите на app/views/articles, то не увидите create.html.erb