Question

si je fais ceci:

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

Je reçois « seulement obtenir, mettre, et les demandes de suppression sont autorisées. » Pourquoi? Rails 2.3.2

Était-ce utile?

La solution 2

Il est en fait un dysfonctionnement dans les versions récentes rails. La solution consiste à adopter la méthode HTTP en-tête de remplacement avec put. Important: le nom complet de l'en-tête est http-x-http-méthode-override mais rails ajoute le préfixe http de sorte que vous devez couper cette partie.

Autres conseils

luca est correcte, vous devez envoyer l'en-tête X-Http-Méthode-Dérogation à votre demande. Mettre _method = mettre dans le corps JSON ne fonctionne pas pour moi. Votre ligne de commande boucle ressemblera à ceci:

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

Il y a deux choses qui pourraient aller mal.

Tout d'abord, vous envoyez un POST avec curl, mais vous avez le paramètre _method « magique » sur votre URL, et il est mis à PUT. Sur la base de l'erreur, il semble que Rails prend des POST comme type de demande faisant autorité. Essayez sans cela et voir ce qui se passe.

En cas d'erreur plus piétonne, le routage (en config/routes.rb pourrait être configuré pour ne pas autoriser les demandes de POST pour l'action que vous essayez d'utiliser.

Si vous utilisez un contrôleur standard RESTful, qui fait le bon sens, parce que vous accédez à un membre (/people/12) qui, par défaut ne permet GET, PUT et DELETE.

Je voudrais essayer d'utiliser curl -X PUT et laisser tomber le ?_method=PUT de votre demande.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top