在我生成一个脚手架后,Rails让我能够POST到items.xml
,这将创建一个新的item
。对items.xml
的GET只会将它们全部列出。根据我正在执行的操作类型,Rails在哪里指定控制器中的哪个方法(分别为create
或index
)?
更具体地说,POST调用methodA但是GET到同一个URL调用methodB。这指定在哪里? Rails在哪里决定调用控制器的index
方法?
答案 0 :(得分:89)
我相信它由REST指定。这是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
编辑添加以获取所有这些路线,在config / routes.rb中,只需添加map.resources :items
答案 1 :(得分:27)
Rails按惯例为RESTful资源定义了七种控制器方法。他们是:
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
列出应用程序中的所有路径。
答案 2 :(得分:10)
了解这一点的最佳位置是Routing Guide。
答案 3 :(得分:6)
您想知道如何仅使用POST吗?这样做,例如:
resources :items, :only => [:create]
...等。顺便说一下,这适用于Rails 3,并将为POST创建一个单独的资源。或者,如果您只需要一小部分REST集,只需:
match 'items/:id' => "items#create', :via => :post
等等。
答案 4 :(得分:5)
就像Don Werve所说,看一下你的routes.rb文件。在那里你可能有这样的东西:
map.resources :items
这是rails将POST和GET请求链接到某些操作的位置。要了解其工作原理,请查看其他答案中的链接。文档帮助了很多。
当您位于rails目录的根目录中时,对于所有路由以及它们链接到哪些操作,您可以在命令提示符中键入rake routes
。这将显示脚手架为您提供的所有内容(就路由而言)。
答案 5 :(得分:5)
这会有很大帮助,但这不是你问题的直接答案。以下命令将列出您的应用程序使用的映射,这样您就不必记住所有细节或猜测。
$ rake routes
为了更直接地回答,这是rails使用的约定。在routes.rb
中添加如下内容时,可以设置此映射map.resources :items
答案 6 :(得分:3)
map.resources是一种自动为您提供REST路由和路径助手的方法。如果您已经了解并了解rails的restful路由是如何工作的,那么这是一个很好的功能,但它也是学习rails的一个障碍,因为隐藏的太多了。
Railsguides有一个很好的routes guide。
答案 7 :(得分:1)
老实说,Rails网站上的路由文档确实不会出错。这有助于采取下一步措施,超越资源的舒适度(大多数应用程序都很好),并确实确定了可用的可靠路由功能。