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

我使用ancestry-gem创建页面和子页面的树,即页面可以有多个子页面,子页面也可以有多个子页面,以此类推。

但我的问题是我不能做/page-1/page-1-2/page-1-2-1的东西。所有子页面的URL都是:/page-1-2/page-1-3-1

我的路线.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

相关内容

  • 没有找到相关文章

最新更新