web-dev-qa-db-fra.com

Rails POST, PUT, GET

Après avoir généré un échafaudage, Rails me donne la possibilité de POST to items.xml qui créera un nouveau item. UN OBTENIR à items.xml les énumérera simplement tous. Où est-ce que Rails spécifie quelle méthode dans le contrôleur (create ou index, respectivement) sera appelée, en fonction du type d'action que j'exécute?

Plus précisément, POST appelle la méthode A mais GET vers la même URL appelle la méthodeB. Où est-ce spécifié? Où Rails prend la décision d'appeler le index méthode du contrôleur?

56
geowa4

Je crois que c'est spécifié par RESTE . Voici une liste pour vous:

GET    /items        #=> index
GET    /items/1      #=> show
GET    /items/new    #=> new
GET    /items/1/edit #=> edit
PUT    /items/1      #=> update
POST   /items        #=> create
DELETE /items/1      #=> destroy

Modifié pour ajouter pour obtenir toutes ces routes, dans config/routes.rb, ajoutez simplement map.resources :items

89
Matt Grande

Rails définit sept méthodes de contrôleur pour les ressources RESTful par convention. Elles sont:

 Action Méthode HTTP Objectif 
 ------------------------------------ ------------------------------------- 
 index GET Affiche une collection de ressources 
 show GET Affiche une seule ressource 
 new GET Affiche un formulaire pour créer une nouvelle ressource 
 create POST Crée une nouvelle ressource (nouveau soumis à cette ) 
 edit GET Affiche un formulaire pour modifier une ressource existante 
 update PUT Met à jour une ressource existante (edit y soumet) 
 destroy DELETE Détruit une seule ressource 

Notez que les navigateurs Web ne prenant généralement en charge que GET et POST, Rails utilise un champ masqué pour les transformer en requêtes PUT et DELETE, le cas échéant.

En précisant map.resources :items dans config/routes.rb vous propose ces sept méthodes "gratuitement". Vous pouvez à tout moment répertorier tous les itinéraires de votre application en entrant rake routes dans la console.

27
John Topley

Le meilleur endroit pour en savoir plus serait le Guide de routage .

10
Don Werve

Voulez-vous savoir comment utiliser uniquement POST? Faites ceci, par exemple:

resources :items, :only => [:create]

..etc. C'est pour Rails 3 soit dit en passant, et générera une seule ressource à créer POST. Ou si vous n'avez besoin que d'un très petit sous-ensemble de l'ensemble REST, simplement:

match 'items/:id' => "items#create', :via => :post

etc.

6
buddhamagnet

Comme l'a dit Don Werve, jetez un œil à votre fichier routes.rb. Là, vous avez probablement quelque chose comme ça:

map.resources :items

C'est là que Rails relie les POST et GET demandes à certaines actions. Pour voir comment cela fonctionne, regardez les liens des autres réponses. Les documents aident un tonne.

Pour toutes les routes et les actions auxquelles elles sont liées, vous pouvez taper rake routes dans l'invite de commande lorsque vous êtes à la racine de votre répertoire Rails. Cela vous montrera tout (en termes de routage) qu'un échafaudage vous donne.

5
vrish88

Cela vous aidera beaucoup, mais ce n'est pas une réponse directe à votre question. La commande suivante répertorie les mappages utilisés par votre application afin que vous n'ayez pas à vous souvenir de tous les détails ou à deviner.

$ rake routes

Pour répondre plus directement, il s'agit d'une convention que Rails utilise. Vous définissez ce mappage lorsque vous placez quelque chose comme ce qui suit dans vos routes.rb

map.resources :items
5
jshen

map.resources est une méthode qui vous donne automatiquement les REST routes et assistants de chemin également. C'est une fonctionnalité intéressante si vous connaissez et comprenez déjà comment fonctionne le routage reposant de Rails, mais peu un obstacle à l'apprentissage Rails parce que trop est caché.

Railsguides a un Nice guide des itinéraires .

3
srboisvert

Pour être honnête, vous ne pouvez pas vraiment vous tromper avec la documentation de routage sur le site Web Rails. Cela a aidé à franchir les prochaines étapes et à aller au-delà du confort des ressources (ce qui est bien pour la plupart des applications). ) et vraiment clouer les fonctionnalités de routage solides disponibles.

http://guides.rubyonrails.org/routing.html

1
Michael