Вопрос

если я сделаю это:

curl -X POST -H 'Content-type: application/xml' -d '<person>...</person>' 'http://0.0.0.0:3000/people/12?_method=PUT'

Я получаю «только получить, положить и удалять запросы». Почему?Рельсы 2.3.2

Это было полезно?

Решение 2

На самом деле это неисправность в последних версиях рельсов.Решение состоит в том, чтобы передать заголовок переопределения метода HTTP с помощью put.Важно: полное имя заголовка — http-x-http-method-override, но Rails добавляет префикс http, поэтому вам следует обрезать эту часть.

Другие советы

Лука прав, вам нужно отправить заголовок X-Http-Method-Override вместе с вашим запросом.Добавление _method=put в тело JSON у меня не сработало.Ваша командная строка Curl будет выглядеть так:

 curl
  -H "X-Http-Method-Override: put"
  -H "Content-Type: application/json"
  -d "{\"user\":{\"email\":\"blah@example.com\"}}"
  www.site.com/users/username.json

Есть пара вещей, которые могут пойти не так.

Прежде всего, вы отправляете POST с curl, но у тебя есть "волшебство" _method параметр вашего URL-адреса, и для него установлено значение PUT.Судя по ошибке, похоже, что Rails принимает POST как авторитетный тип запроса.Попробуйте без этого и посмотрите, что произойдет.

При более прозаичной ошибке маршрутизация (в config/routes.rb можно настроить так, чтобы не разрешать POST запросы на действие, которое вы пытаетесь использовать.

Если вы используете стандартный контроллер RESTful, это имеет смысл, поскольку вы получаете доступ к члену (/people/12), что по умолчанию позволяет только GET, PUT, и DELETE.

Я бы попробовал использовать curl -X PUT и отбросив ?_method=PUT из вашего запроса.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top