2009-04-22 114 views
54

当我生成一个脚手架后,Rails使我能够POST到items.xml,这将创建一个新的item。获取到items.xml将简单列出他们全部。根据我正在执行的操作类型,Rails在哪里指定将调用控制器中的哪个方法(分别为createindex)?Rails POST,PUT,GET

更具体地说,POST调用methodA但GET调用相同的URL调用methodB。这在哪里指定? Rails在哪里决定调用控制器的index方法?

回答

88

我相信这是由REST指定的。下面是雅列表:

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 

编辑补充获得所有这些路线,在配置/ routes.rb中,只需添加map.resources :items

+38

只需输入“rake routes”即可查看发生了什么。 – 2009-04-22 18:58:53

+0

有没有一种方法可以明确指定我只想在ASP.NET MVC([HttPost]属性)中使用POST? – Alex 2010-10-17 16:11:52

+0

如果您执行GET /项目,您将转到索引操作。如果您发布到/项目,您将转到创建。 – 2010-10-19 15:22:29

5

像Don Werve说的那样,看看你的routes.rb文件。在那里你可能有这样的事情:

map.resources :items 

这是哪里的轨道链接POST和GET请求到某些行动。看看这些工作是如何看待其他答案的链接。该文件有助于一吨。

当您位于rails目录的根目录中时,要将所有路由及其链接的操作键入rake routes到命令提示符中。这将向您展示脚手架带给您的一切(就路由而言)。

5

这会帮助很多,但它不是对您的问题的直接答案。以下命令将列出您的应用使用的映射,因此您不必记住所有细节或猜测。

$ rake routes 

要更直接地回答,这是rails使用的约定。当你把类似下面你的routes.rb

map.resources :items 
27

的Rails按照惯例定义了RESTful资源7种控制器方法你设置这个映射了。它们是:

 
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 

注意,因为Web浏览器一般只支持GET和POST,Rails使用一个隐藏字段把这些变成PUT和DELETE请求适当。

指定map.resources :itemsconfig/routes.rb让你“免费”的七种方法。您可以在控制台中随时输入rake routes,随时列出应用程序中的所有路线。

3

map.resources也是一种自动为您提供REST路由和路径助手的方法。如果你已经知道并理解了rails的安静路由是如何工作的,那么这是一个很好的特性,但这对于学习rails来说也是一个障碍,因为隐藏太多了。

Railsguides有一个不错的routes guide

6

您是否想知道如何使用POST?这样做,例如:

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

..等等。这是针对Rails 3的,并且会生成一个POST创建的资源。或者,如果你只需要REST集的真正小部分,只是:

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

等等等等

1

说实话,你真的不能去错了Rails网站上的路由文档。这有助于采取下一步措施,并超越资源的舒适度(对于大多数应用程序来说都很好),并且确实可以确定可用的可靠路由功能。

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