4

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
4

2 に答える 2

2

awesome_nested_set はよく知らないのですが、Rails 3 では order を 2 回呼び出すことができます。

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

これにより、カテゴリは各レベルで並べられ、次に各レベル内で名前で並べられるはずです。また、モデル内のデフォルト スコープでこれをスローすることもできます。

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

注文はデフォルト値に影響を与えないため、デフォルト スコープに最適です。

于 2011-07-28T05:10:53.497 に答える
1

@item.children.except(:order).order("your_sort_column")このstackoverflowの投稿で提案されているように使用できます: awesome nested set order by

于 2015-06-06T11:12:44.340 に答える