Я бы сказал, что вы просто не поняли, как и, что более важно, почему REST работает так же, как в Rails, и вы должны попытаться изучить фреймворк, прежде чем навязывать ему свои собственные идеи.рельсовые маршруты не имеют действия в этом.Вы выполняете обновление, отправляя запрос PATCH или PUT на things/:id
.Исключением являются new
и edit
, поскольку эти действия используются для визуализации форм.
Prefix Verb URI Pattern Controller#Action
things GET /things(.:format) things#index
POST /things(.:format) things#create
new_thing GET /things/new(.:format) things#new
edit_thing GET /things/:id/edit(.:format) things#edit
thing GET /things/:id(.:format) things#show
PATCH /things/:id(.:format) things#update
PUT /things/:id(.:format) things#update
DELETE /things/:id(.:format) things#destroy
Действие редактирования (GET / things /: id / edit) отображает форму для редактирования ресурса.Это идемпотентное действие, так как оно должно возвращать тот же результат и не изменять ресурс.
Действие обновления (PATCH | PUT / things /: id) отображает результат выполнения неидемпотентного преобразования вресурс.
Следует также отметить, что рендеринг в Rails не имеет ничего общего с перенаправлением.Что является распространенным заблуждением.
render :edit
На самом деле это просто сокращение для:
render "things/edit"
Это не вызывает действие редактирования - оба просто разделяют представление, но концептуально совершенно разные действия.
Перезагрузка этой страницы, конечно, не будет отображать тот же результат, что и запрос GET для /things/1
- не PATCH / PUT.Помните, что запросы GET всегда должны быть идемпотентными.
Перенаправление назад создаст запись в истории как отдельный запрос GET плюс тот факт, что вам нужно передать все тело формы в виде параметров GET, что вряд ли идеально.Кроме того, вы в основном отбрасываете реальную мощь рельсов, то есть производительность, которую вы получаете, принимая ее условности.