有没有办法自动创建索引的复数路由和其他所有的单数?

时间:2011-04-11 20:54:50

标签: ruby-on-rails resources routing

在处理集合资源时,我喜欢使用复数作为索引(即列表)页面(查看许多对象),并使用单数表示其他页面(创建/更新/删除)一个对象)。

为了做到这一点,我似乎必须创建我的路线:

map.objects 'objects.:format', :controller => :object, :action => :index, :conditions => { :method => :get }
map.resources :object, :controller => :object, :except => :index

这会创建如下路线:

     objects GET    /objects(.:format)          {:action=>"index", :controller=>"object"}
object_index POST   /object(.:format)           {:action=>"create", :controller=>"object"}
  new_object GET    /object/new(.:format)       {:action=>"new", :controller=>"object"}
 edit_object GET    /object/:id/edit(.:format)  {:action=>"edit", :controller=>"object"}
      object GET    /object/:id(.:format)       {:action=>"show", :controller=>"object"}
             PUT    /object/:id(.:format)       {:action=>"update", :controller=>"object"}
             DELETE /object/:id(.:format)       {:action=>"destroy", :controller=>"object"}

它有效,但似乎我在我的路由文件中使用了一个额外的行(以明确指定索引路由),而我不应该这样做。有没有办法在一条路线上做我想做的事情?或者,有没有理由不采用这种方式?

2 个答案:

答案 0 :(得分:2)

除了“正常的REST说不要”之外没有“对象”是“对象”下的资源的唯一原因是搜索引擎。

谷歌会注意到你有“食谱”,然后是“食谱”下的食谱,并给你那些很酷的附加链接:

sitelinks

  

谷歌的网站管理员指南说,在   设计中的第一个项目和   内容指南,“建立一个网站   明确的层次结构和文本链接。“

答案 1 :(得分:1)

RESTful路由的设计方式使您可以确定要执行的操作。说你去http://example.com/objects。在这里,您告诉您想要列表对象的网站。

现在当你转到http://example.com/objects/2时,你告诉它你想在对象列表(或资源)中看到标识符为2的对象。

最后,当您转到http://example.com/objects/2/edit时,您说要再次找到标识为2的对象,但这次您想要编辑它而不是查看它。

与你在路由助手中提出的建议相反,你会给自己和其他人阅读你的代码带来巨大的不必要的痛苦。

但是如果你选择走这条路(再次,我建议反对)那么是的,定义两条路线是唯一的方法。