В конце ваших маршрутов:
map.with_options :controller => 'pages' do |pages|
pages.show_page ':id', :action => 'show'
pages.show_page_with_parent ':id/:parent_id', :action => 'show'
end
Если вы сгенерируете ссылку на него:
show_page_with_parent_path(:id => page.name, :parent_id => page.parent.name)
Это, конечно, если предположить, что ключ slug - это имя.
Конечно, вы можете дополнительно настроить это решение с помощью вспомогательной функции:
EG:
def custom_show_page_path(page)
if page.parent.nil?
show_page_path(:id => page.name)
else
show_page_with_parent_path(:id => page.name, :parent_id => page.parent.name)
end
end