有没有办法在infinetelly中自行嵌套资源?
假设以下场景:我想创建几个可以自我嵌套的页面,例如产品页面有许多产品页面,每个产品页面有几个子页面等。
资源将是树结构中的页面,与awesome nested set gem
一样。
如果管理员可以创建未知深度级别的页面,我将如何制作路线?
以上示例必须生成类似/:friendly_id_of_level_1/:friendly_id_of_level_2/.../:friendly_id_of_level_n
我尝试过使用动态路线,但这样做有很多缺点。
有什么建议吗?
答案 0 :(得分:3)
我在这个路线的一个应用程序中做了类似的事情:
map.connect "/c/*modules", :controller => "content", :action => "show"
(注意这是使用rails2路由语法,您可能需要更新它。)
这将解决此网址
/c/123-foo/456-bar/789-baz/653-qux
到content#show
操作,参数设置为
params = {"modules"=>[123-foo", "456-bar", "789-baz", "653-qux"]}
模块采用树形结构,因此我可以使用params [:modules]中的模块ID序列来创建面包屑链和任何其他层次数据,并使用数组中的最后一个作为&# 34;电流"一个实际向用户显示。
注意:我把" / c /"在网址的开头,将这些嵌套路线与我的所有其他路线分开:否则它非常贪婪,并且会匹配您网站上的任何网址。如果你想把它作为你的" catchall"那就不成问题了。路由文件底部的路由,但如果没有,那么您需要添加一些内容以使其与众不同。显然,这不需要是" / c /",你可以有任何阻止它与你的其他路线相撞的东西。