构建使用acts_as_tree的资源的嵌套路由

时间:2011-05-11 21:53:52

标签: ruby-on-rails ruby-on-rails-3 nested-routes acts-as-tree

您知道如何生成动态路由,例如:

... (/: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路由来处理那些可能的嵌套路由?谢谢!

1 个答案:

答案 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