当我生成一个脚手架后,Rails使我能够POST到items.xml
,这将创建一个新的item
。获取到items.xml
将简单列出他们全部。根据我正在执行的操作类型,Rails在哪里指定将调用控制器中的哪个方法(分别为create
或index
)?Rails POST,PUT,GET
更具体地说,POST调用methodA但GET调用相同的URL调用methodB。这在哪里指定? Rails在哪里决定调用控制器的index
方法?
当我生成一个脚手架后,Rails使我能够POST到items.xml
,这将创建一个新的item
。获取到items.xml
将简单列出他们全部。根据我正在执行的操作类型,Rails在哪里指定将调用控制器中的哪个方法(分别为create
或index
)?Rails POST,PUT,GET
更具体地说,POST调用methodA但GET调用相同的URL调用methodB。这在哪里指定? Rails在哪里决定调用控制器的index
方法?
我相信这是由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
了解,这将是Routing Guide最好的地方。
像Don Werve说的那样,看看你的routes.rb文件。在那里你可能有这样的事情:
map.resources :items
这是哪里的轨道链接POST和GET请求到某些行动。看看这些工作是如何看待其他答案的链接。该文件有助于一吨。
当您位于rails目录的根目录中时,要将所有路由及其链接的操作键入rake routes
到命令提示符中。这将向您展示脚手架带给您的一切(就路由而言)。
这会帮助很多,但它不是对您的问题的直接答案。以下命令将列出您的应用使用的映射,因此您不必记住所有细节或猜测。
$ rake routes
要更直接地回答,这是rails使用的约定。当你把类似下面你的routes.rb
map.resources :items
的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 :items
在config/routes.rb
让你“免费”的七种方法。您可以在控制台中随时输入rake routes
,随时列出应用程序中的所有路线。
map.resources也是一种自动为您提供REST路由和路径助手的方法。如果你已经知道并理解了rails的安静路由是如何工作的,那么这是一个很好的特性,但这对于学习rails来说也是一个障碍,因为隐藏太多了。
Railsguides有一个不错的routes guide。
您是否想知道如何使用POST?这样做,例如:
resources :items, :only => [:create]
..等等。这是针对Rails 3的,并且会生成一个POST创建的资源。或者,如果你只需要REST集的真正小部分,只是:
match 'items/:id' => "items#create', :via => :post
等等等等
说实话,你真的不能去错了Rails网站上的路由文档。这有助于采取下一步措施,并超越资源的舒适度(对于大多数应用程序来说都很好),并且确实可以确定可用的可靠路由功能。
只需输入“rake routes”即可查看发生了什么。 – 2009-04-22 18:58:53
有没有一种方法可以明确指定我只想在ASP.NET MVC([HttPost]属性)中使用POST? – Alex 2010-10-17 16:11:52
如果您执行GET /项目,您将转到索引操作。如果您发布到/项目,您将转到创建。 – 2010-10-19 15:22:29