1

我正在阅读 Patrick Lenz 的《Simply Rails》……也许我错过了什么,似乎每当我们把

map.resources :stories

在路线.rb

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

4

3 回答 3

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

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

于 2009-05-24T14:07:34.153 回答
2

但!!!如果您的控制器中有其他操作,除非您在 .resources 行上方引入其他路由,否则不会找到它们!

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

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

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

于 2009-09-09T02:27:50.123 回答
1

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

于 2009-05-24T14:07:36.290 回答