2014-11-04 96 views
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 

和我使用ancestry寶石創建的頁面和子頁面樹,即頁面可以有多個子頁面和子頁面也可以有多個子頁面,以此類推至無窮大。

但我的問題是,我不能做的東西是/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 

如何使嵌套的網址是什麼?

謝謝!

回答

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 
+1

它的作品,THX!但是當我想編輯一些子頁面時,我發現錯誤「ActiveRecord :: RecordNotFound'和'Parameters:{」slug「=>」page-1/page-1-1/page-1-1-1/page-1 1-1-1 /編輯「}'。我如何解決這個問題? – jazzis18 2014-11-04 12:01:21

+0

你需要使用'Page.find_by_slug(params ['slug'])'。另外,如果有幫助,請不要忘記[接受答案](https://stackoverflow.com/tour)。 – Surya 2014-11-04 12:04:15

+0

對不起)是的,我用它'find_by_slug',但我都一樣抓住這個錯誤。 – jazzis18 2014-11-04 12:38:14