установить метод PUT в рельсах XML-запросов - PullRequest
3 голосов
/ 08 августа 2009

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

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

Я получаю «Разрешены только запросы на получение, установку и удаление». Зачем? Рельсы 2.3.2

Ответы [ 3 ]

4 голосов
/ 20 декабря 2009

luca правильно, вам нужно отправить заголовок 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
3 голосов
/ 07 октября 2009

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

0 голосов
/ 09 августа 2009

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

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

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

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

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

...