Rails изначально использовал только HTTP-глагол PUT для обновлений. В 2012 PATCH был объявлен новый первичный метод HTTP для обновлений из-за семантики того, как IETF определяет PUT .
Теперь допустим, что у веб-приложения есть модель Invoice с оплаченным флагом
это указывает, был ли счет оплачен. Как вы установите это
флаг в RESTful способ? Отправка оплаченного = 1 через PUT в / invoices /: id делает
не соответствует семантике HTTP, потому что такой запрос не будет
отправка полного представления счета на замену.
Всю дискуссию о том, как и почему можно найти в выпуске # 348 .
Однако по причинам устаревшей совместимости макросы resources
и resource
по-прежнему генерируют маршрут PUT. Это был лучший компромисс, чем нарушение работы Rails-маршрутизатора для одинаковой обработки PUT и PATCH.
Почему эта унаследованная совместимость все еще существует в 2019 году, это еще один действительно хороший вопрос.