在Ruby on Rails中,map.resources:story会立即使Story RESTful成为现实吗?

时间:2009-05-24 13:34:27

标签: ruby-on-rails rest url-routing

我正在阅读Patrick Lenz的Simply Rails ...也许我错过了什么,似乎每当我们放

map.resources :stories

在routes.rb

然后立即,控制器将有特殊约定,现在Story是一个RESTful资源?也许作者使用了资源这个词,但没有提到它是RESTful但它们是同一个东西?

3 个答案:

答案 0 :(得分:4)

在路由中使用它意味着您自动获得一些标准路由,以帮助您构建一个宁静的应用程序。例如:

 new_story GET     /story/new(.:format)  {:action=>"new", :controller=>"stories"}
edit_story GET     /story/edit(.:format) {:action=>"edit", :controller=>"stories"}
     story GET     /story(.:format)      {:action=>"show", :controller=>"stories"}
           PUT     /story(.:format)      {:action=>"update", :controller=>"stories"}
           DELETE  /story(.:format)      {:action=>"destroy", :controller=>"stories"}
           POST    /story(.:format)      {:action=>"create", :controller=>"stories"}

只需在路线文件中包含这一行,就可以使用所有这些路径。您只需要确保在新的,编辑,显示,更新,销毁和创建故事控制器的操作中提供正确的功能,您将获得一个宁静的设计。

为了查看路径可用的内容,您可以转到应用程序文件夹并提供命令:

rake routes

这将根据您在路线文件中输入的内容输出所有可用的路径。

答案 1 :(得分:2)

BUT !!!如果你的控制器中有其他动作,除非你引入上述.resources行以外的其他路线,否则它们将无法找到!

因此,如果您在故事控制器中有一个名为turn_page的操作,则需要在map.resources行之前包含map.connect行 - 就像在此片段中一样:

map.connect 'stories/turn_page', :controller => 'stories', :action => 'turn_page'
map.resources :stories

希望有人帮助!由于所有示例都是“常规”路由或通过.resources语句定义的REST集,我在这个问题上工作了几个小时!

答案 2 :(得分:1)

是。一旦将其添加到路由中,您的Story控制器将以预期的方式响应常见的REST动词。