HTTP методы и HTML¶
HTTP поддерживает множество методов:
- get используется только для получения данных, может быть закэширован
- post - для создания новой сущности
- patch - для частичного обновления сущности
- put - для создания или полной замены сущности, upsert
- delete - для удаления
- и т.д.
Однако HTML умеет работать только с get и post. Get используется при переходе по ссылкам, а post для отправки форм.
Если вы хотите создать кнопку, отправляющую некоторую команду серверу, то придется реализовать ее в виде html формы, т.к. команда будет отправлена с помощью post и не будет закэширована.
При проектировании маршрутов не стоит ограничиваться только get и post, используйте семантику протокола. В этом поможет js. В экосистеме Ruby on Rails есть проект rails-ujs. И он доступен отдельно от rails в виде npm пакета. Благодаря unpkg.com его очень просто добавить на страницу:
<!-- content -->
<script src="https://unpkg.com/rails-ujs@5.2.0/lib/assets/compiled/rails-ujs.js"></script>
</body>
</html>
rails-ujs сканирует документ на предмет ссылок с data-атрибутом method:
<a class="nav-item nav-link" data-method="delete" href="/some-url">
some text
</a>
При клике на такую ссылку rails-ujs создает невидимую форму и отправляет ее post запросом.
Метод устанавливается в поле формы _method
.
Если вы используете отличные от get и post методы, то приложение должно
отслеживать параметр _method
и подменять метод в запросе.