您知道如何生成动态路由,例如:
... (/:parent_id(/:parent_id(/:parent_id(/:parent_id))))/:id
我问这个问题是因为我有Folder
模型作为树(它有一个parent_id
字段),而它的to_param
方法返回name
,这是unq通过parent_id
的范围。因此,每个:parent_id
和:id
的事件都是name
。以下是路径示例(包含4个子文件夹):
/home/desktop/projects/rails/foobar
...第一个:parent_id
(根)是“home”而:id
是“foobar”。
路线的另一个例子可能是(有1个子文件夹):
/home/music
...正如您所见,params[:parent_id] == 'home'
和params[:id] == 'music'
。
有没有一种干净的方法来编写一个漂亮的Rails 3路由来处理那些可能的嵌套路由?谢谢!
答案 0 :(得分:4)
为什么不使用route globber并在控制器中将其分解?
# routes.rb
get "/*folders/:id" => "files#show"
*folders
部分将汇总多个网址段。
# files_controller.rb
def show
folders = params[:folders].split('/') # gives an array of folder names
# do whatever else necessary
end