2011-02-05 77 views
3

鄉親們! 我不知道如何使URL像:site.com/coding/ruby/rails/article-name 正如你可以看到有嵌套的類別。我已經看過行爲樹和真棒嵌套集,但它使得像網站site.rails/article-name。RoR嵌套類別

所以,請幫我

回答

0

你可以嘗試使用Friendly-id

+0

tnx,我已經試過這個寶石。主要的問題是維護url中的「breadcrumbs」(嵌套url)。轉換rails/1到rails/article-name我沒有任何問題 – Fluffy 2011-02-05 08:52:30

0

要這樣設置,你下手,做了路線 「路線通配符」:

match "*category" => "categories#show"

match "categories/*category" => "categories#show"

在你的控制器

,您將收到的所有零件的URL通過params散列。爲了保持乾淨的東西,在你的模型中定義的搜索邏輯模型中的

def show 
    @category = Category.find_recursive(*params[:categories]) 
end 

,定義找到類的方法。我假設acts_as_tree在模型中定義

def self.find_recursive(*categories) 
    children = roots 
    last = nil 
    categories.each do |category| 
    return unless children 

    last = children.find_by_permalink(category) 
    children = last.children 
    end 
    last 
end 
4

如果你想使用一個資源FUL控制器,使得這樣的路徑:

scope '(*categories)' do 
    resources :articles 
end 

這將需要使用在結束「文章」你的網址:/編碼/的Ruby/Rails /條/條名

,或者你可以使用這樣的路線:

match '(*categories)/:id' => 'articles#show', :as => :article 

,這將讓你做article_path(:類=> '編碼/的Ruby/Rails',:ID => article.friendly_id)

獲取/編碼/的Ruby/Rails /條名

如果您正在使用awesome_nested_set,你可以通過做類似的東西產生類別字符串

article.category.self_and_ancestors.join("/")