在我生成一个脚手架后,Rails让我能够POST到items.xml
哪个将创建一个新的item
.GET items.xml
将简单地列出所有.根据我正在执行的操作类型,Rails在哪里指定控制器(create
或index
分别)中的哪个方法将被调用?
更具体地说,POST调用methodA但是GET到同一个URL调用methodB.这指定在哪里?Rails在哪里决定调用index
控制器的方法?
我相信它是由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
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
控制台随时列出应用程序中的所有路径.
有关更多详细信息,请参阅从外部输入的Rails路由.
了解这一点的最佳位置是路由指南.
您想知道如何仅使用POST吗?这样做,例如:
resources :items, :only => [:create]
..等等.顺便说一下,这适用于Rails 3,并将为POST创建一个单独的资源.或者如果您只需要一小部分REST集,只需:
match 'items/:id' => "items#create', :via => :post
等等
就像Don Werve所说,看一下你的routes.rb文件.在那里你可能有这样的事情:
map.resources :items
这是rails将POST和GET请求链接到某些操作的位置.要了解其工作原理,请查看其他答案中的链接.文档帮助了很多.
对于所有路由以及它们链接到哪些操作,您可以rake routes
在rails目录的根目录中键入命令提示符.这将显示脚手架为您提供的所有内容(就路由而言).
这将有很大帮助,但它不是你问题的直接答案.以下命令将列出您的应用程序使用的映射,这样您就不必记住所有细节或猜测.
$ rake routes
为了更直接地回答,这是rails使用的约定.在routes.rb中放入类似下面的内容时,可以设置此映射
map.resources :items