【问题标题】:Ordering category select menu alphabetically with awesome_nested_set使用 awesome_nested_set 按字母顺序排序类别选择菜单
【发布时间】:2010-12-21 07:16:48
【问题描述】:

在 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

【问题讨论】:

    标签: ruby-on-rails nested-sets


    【解决方案1】:

    虽然我对 awesome_nested_set 不熟悉,但你可以在 Rails 3 中调用两次 order。

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

    这应该按每个级别排序类别,然后按每个级别内的名称排序。此外,您可以将其放在模型内的默认范围内。

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

    订单非常适合默认范围,因为它们不会影响任何默认值。

    【讨论】:

    • 从这篇文章开始,我们意识到在处理数据操作时,在默认范围内使用 order 的困难。
    【解决方案2】:

    您可以按照此 stackoverflow 帖子中的建议使用 @item.children.except(:order).order("your_sort_column")awesome nested set order by

    【讨论】:

      猜你喜欢
      • 2011-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多