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