Мой образцовый класс:
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
... и так один
Спасибо за любую справку :)
Вы можете сделать это с помощью обычных маршрутов и 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
Однако обратите внимание, что вложенный ресурс маршрутизация более чем на один уровень не рекомендуется.
Это непросто (читайте: я не знаю, как это сделать) и не рекомендуется. Представьте, что у вас есть 10 категорий, и вы не хотите, чтобы URL-адрес был / categorya / categoryb / categoryc / categoryd / categorye / categoryf / categoryg / categoryh / categoryi / categoryj
.
Возможно, максимальный уровень 3 предоставит вам желаемую мощность, не загрязняя URL-адрес?
Я сомневаюсь в этом, и это не очень хорошая идея. Код Rails Route mapping достаточно сложен без необходимости динамически пытаться кодировать и декодировать (возможно) бесконечные строки маршрутов.