Pergunta

se eu fizer isso:

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

Eu recebo "Só GET, PUT, e os pedidos de exclusão são permitidos." Por quê? Rails 2.3.2

Foi útil?

Solução 2

Este é realmente um mau funcionamento em trilhos versões recentes. A solução é passar o cabeçalho HTTP com substituição do método de venda. Importante: o nome completo do cabeçalho é http-x-http-method-override mas trilhos acrescenta o prefixo http assim que você deve cortar essa parte.

Outras dicas

luca está correto, você precisa enviar o cabeçalho X-HTTP-Method-Override com o seu pedido. Colocando _method = colocar no corpo JSON não funcionou para mim. Sua linha de comando curl será parecido com este:

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

Há um par de coisas que poderiam estar errados.

Primeiro, você está enviando uma POST com curl, mas você tem o parâmetro _method "mágica" em seu URL, e ele é definido como PUT. Com base no erro, parece que Rails está tomando POST como o tipo de solicitação de autoridade. Experimentá-lo sem isso e ver o que acontece.

Em um erro mais pedestre, o encaminhamento (em config/routes.rb pode ser configurado para não permitir que os pedidos POST para para a ação que você está tentando usar.

Se você estiver usando um controlador RESTful padrão, que faz todo o sentido, porque você está acessando um membro (/people/12), que por padrão só permite GET, PUT e DELETE.

Eu tentaria usando curl -X PUT e soltando a ?_method=PUT do seu pedido.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top