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?
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
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.
Le meilleur endroit pour en savoir plus serait le Guide de routage .
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.
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.
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
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 .
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.