Rails POST, PUT, GET

After I generate a scaffold, Rails gives me the ability to POST to items.xml which will create a new item . A GET to items.xml will simply list them all. Where does Rails specify which method in the controller ( create or index , respectively) will be called, based on the type of action I am performing?

More specifically, POST calls methodA but GET to the same URL calls methodB. Where is this specified? Where does Rails make the determination to call the index method of the controller?


I believe it's specified by REST. Here's a list for ya:

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

Edited to add to get all those routes, in config/routes.rb, simply add map.resources :items


Rails defines seven controller methods for RESTful resources by convention. They are:

Action   HTTP Method  Purpose
-------------------------------------------------------------------------
index    GET          Displays a collection of resources
show     GET          Displays a single resource
new      GET          Displays a form for creating a new resource
create   POST         Creates a new resource (new submits to this)
edit     GET          Displays a form for editing an existing resource
update   PUT          Updates an existing resource (edit submits to this)
destroy  DELETE       Destroys a single resource

Note that because web browsers generally only support GET and POST, Rails uses a hidden field to turn these into PUT and DELETE requests as appropriate.

Specifying map.resources :items in config/routes.rb gets you those seven methods "for free". You can list all the routes within your application at any time by entering rake routes in the console.

  • See Rails Routing from the Outside In for more detail.

  • 了解这个最好的地方是路由指南。

    链接地址: http://www.djcxy.com/p/41004.html

    上一篇: 如何在jQuery中发送PUT / DELETE请求?

    下一篇: Rails POST,PUT,GET