2010-12-21 2 views
4

Mit awesome_nested_set mit Rails 3 habe ich ein hierarchisches System erstellt. Um die Kategorieauswahl in der Ansicht angezeigt werden, habe ich den folgenden Code verwendet:Bestellkategorie Wählen Sie das Menü alphabetisch mit 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) %>

Ich bin versucht, die Kategorien in alphabetischer Reihenfolge auf einer Ebene für Ebene Basis zu bestellen. Wenn ich die nested_set_options(Category, @category) zu nested_set_options(Category.order("name"), @category) ändere, wird dies die gesamte Kategorienliste nach Namen neu ordnen; Was ich tun möchte, ist die Reihenfolge der Kinder jedes Knotens alphabetisch nach Namen.

Zum Beispiel möchte ich wählen Menü resultierenden wie folgt bestellt werden:

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

Antwort

2

Obwohl ich mit awesome_nested_set nicht vertraut bin, können Sie bestellen zweimal in Rails nennen 3.

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

Diese sollte Kategorie nach jeder Ebene und dann nach Namen in jeder Ebene bestellen. Sie können dies auch auf den Standardbereich innerhalb des Modells anwenden.

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

Aufträge sind ideal für den Standardbereich, da sie keine Standardwerte beeinflussen.

+0

Seit diesem Beitrag haben wir die Schwierigkeiten bei der Verwendung, um im Standardbereich realisiert werden, wenn sie mit Datenmanipulation zu tun. – efoo

1

Sie @item.children.except(:order).order("your_sort_column") verwenden können, wie in diesem Beitrag vorgeschlagen Stackoverflow: awesome nested set order by

Verwandte Themen