7

我的模型类是:

class Category < ActiveRecord::Base
  acts_as_nested_set
  has_many :children, :foreign_key => "parent_id", :class_name => 'Category'
  belongs_to :parent, :foreign_key => "parent_id", :class_name => 'Category' 


  def to_param
    slug
  end
end

是否有可能有这样的递归路线: /root_category_slug/child_category_slug/child_of_a_child_category_slug......等等

感谢您的任何帮助 :)

4

4 回答 4

4

您可以使用常规路线和Route Globbing来做到这一点,例如,

map.connect 'categories/*slugs', :controller => 'categories', :action => 'show_deeply_nested_category'

然后在你的控制器中

def show_deeply_nested_category
  do_something = params[:slugs]  # contains an array of the path segments
end

但是,请注意,不建议嵌套资源路由超过一层。

于 2010-04-04T02:56:54.300 回答
2

我对此表示怀疑,这不是一个好主意。Rails 路由映射代码足够复杂,无需动态尝试编码和解码(可能)无限的路由字符串。

于 2010-04-04T02:12:59.173 回答
1

您可以在轨道布线中使用约束。例如:

match '*id', :to => 'categories#show', :constraints => TaxonConstraint.new

class TaxonConstraint
  def matches?(request)
    path = request.path.slice(1..(request.path.length-1)
    path = path.split('/')
    return false if path.length != path.uniq.length
    return true if Category.check(path.last).first
    false
  end
end

类用 "/" 分割你的路径,并检查 db 中的最后一个元素。如果未找到,则跳过该路线。如果有人知道如何更好地解决它,将很高兴听到。

于 2011-07-29T08:13:17.720 回答
0

这并不容易(阅读:我不知道该怎么做)并且不建议这样做。想象一下,如果你有 10 个类别,你不希望 url 是/categorya/categoryb/categoryc/categoryd/categorye/categoryf/categoryg/categoryh/categoryi/categoryj.

也许最高级别 3 会授予您所需的权力,而不会污染 URL?

于 2010-04-01T10:46:50.450 回答