在处理集合资源时,我喜欢使用复数作为索引(即列表)页面(查看许多对象),并使用单数表示其他页面(创建/更新/删除)一个对象)。
为了做到这一点,我似乎必须创建我的路线:
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"}
它有效,但似乎我在我的路由文件中使用了一个额外的行(以明确指定索引路由),而我不应该这样做。有没有办法在一条路线上做我想做的事情?或者,有没有理由不采用这种方式?
答案 0 :(得分:2)
除了“正常的REST说不要”之外没有“对象”是“对象”下的资源的唯一原因是搜索引擎。
谷歌会注意到你有“食谱”,然后是“食谱”下的食谱,并给你那些很酷的附加链接:
谷歌的网站管理员指南说,在 设计中的第一个项目和 内容指南,“建立一个网站 明确的层次结构和文本链接。“
答案 1 :(得分:1)
RESTful路由的设计方式使您可以确定要执行的操作。说你去http://example.com/objects
。在这里,您告诉您想要列表对象的网站。
现在当你转到http://example.com/objects/2
时,你告诉它你想在对象列表(或资源)中看到标识符为2的对象。
最后,当您转到http://example.com/objects/2/edit
时,您说要再次找到标识为2的对象,但这次您想要编辑它而不是查看它。
与你在路由助手中提出的建议相反,你会给自己和其他人阅读你的代码带来巨大的不必要的痛苦。
但是如果你选择走这条路(再次,我建议反对)那么是的,定义两条路线是唯一的方法。