在Rails 3中使用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
答案 0 :(得分:2)
虽然我不熟悉awesome_nested_set,但你可以在Rails 3中调用两次。
Category.order(:level).order(:name)
这应该按每个级别按顺序排序,然后按每个级别的名称排序。此外,您可以将其抛在模型中的默认范围内。
class Category < ActiveRecord::Base
default_scope order('level, name')
...
end
订单非常适合默认范围,因为它们不会影响任何默认值。
答案 1 :(得分:1)
您可以按照此stackoverflow帖子中的建议使用@item.children.except(:order).order("your_sort_column")
:awesome nested set order by