2

我有一个模型:

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

我的路线.rb:

Rails.application.routes.draw do
    get '/pages' => 'pages#index'

    resources :pages, path: "", path_names: { new: 'add' }

    root 'pages#index'
end

如何制作嵌套网址?

谢谢!

4

1 回答 1

3

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

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

因此,要完成这项工作,您可能可以更改模型类generate_slug中的方法:Page

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
于 2014-11-04T09:42:30.417 回答