2010-12-21 81 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