2010-12-21 59 views
4

在Rails 3中使用awesome_nested_set,我創建了分層類別系統。要在視圖中顯示的類別選擇,我用下面的代碼:使用awesome_nested_set按字母順序排列類別選擇菜單

<%= form.select :parent_id, options_for_select(nested_set_options(Category, @category) {|i| "#{'-' * i.level} #{i.name}" }.unshift(["No Parent", nil]), @category.parent_id) %>

我試圖訂購按字母順序排列的類別,由水平的基礎水平。如果我將nested_set_options(Category, @category)更改爲nested_set_options(Category.order("name"), @category),則會按名稱重新排列整個類別列表;我想要做的是按名稱按字母順序重新排序每個節點的子節點。

例如,我想導致選擇菜單訂購這樣的:

Animal 
- Bird 
-- Chicken 
-- Hawk 
- Fish 
-- Cod 
-- Goldfish 
-- Trout 
- Mammal 
-- Cat 
-- Primate 
--- Chimpanzee 
--- Human 
-- Zebra 
Plant 
- Tree 

回答

2

雖然我不熟悉awesome_nested_set,你可以在Rails的來電訂購兩次3.

Category.order(:level).order(:name) 

這應按照每個級別命名類別,然後按照每個級別的名稱命名。此外,您可以將其放在模型的默認範圍內。

class Category < ActiveRecord::Base 
    default_scope order('level, name') 
    ... 
end 

訂單對於默認範圍非常適用,因爲它們不會影響任何默認值。

+0

由於這篇文章中,我們已經實現了與數據操作打交道時默認使用的範圍順序的難度。 – efoo 2011-10-31 19:13:50