rails – 如何使用祖先制作嵌套路由

我有一个型号:

class Page < ActiveRecord::Base has_ancestry validates :slug, :name, uniqueness: true, presence: true before_validation :generate_slug def to_param slug end def generate_slug self.slug = Russian.translit(name).parameterize end end 

我正在使用ancestrygem创建页面和子页面树,即页面可以有多个子页面,子页面也可以有多个子页面,依此类推到无穷大。

但我的问题是,我无法制作的东西是/page-1/page-1-2/page-1-2-1 。 所有子页面的URL都是: /page-1-2/page-1-3-1

我的routes.rb:

 Rails.application.routes.draw do get '/pages' => 'pages#index' resources :pages, path: "", path_names: { new: 'add' } root 'pages#index' end 

如何制作嵌套url?

谢谢!

据我所知,没有采用动态永久链接捕获嵌套树结构路由的简洁方法,您可以创建一个命名路由来捕获相当嵌套的页面路径:

 get '/p/*id', :to => 'pages#show', :as => :nested_pages 

此外,请确保更新页面对象的slug以具有嵌套的URL,即:将父页面的slug附加到它。 例如:

 page1.slug = '/page-1' page2.slug = '/page-1/page-2' # page2 is a child of page1 page3.slug = '/page-1/page-2/page-3' # page3 is a child of page2 

因此,为了使其工作,您可以更改Page模型类中的generate_slug方法:

 def generate_slug name_as_slug = Russian.translit(name).parameterize if parent.present? self.slug = [parent.slug, (slug.blank? ? name_as_slug : slug.split('/').last)].join('/') else self.slug = name_as_slug if slug.blank? end end