令人敬畏的嵌套集顺序

时间:2009-08-28 15:51:20

标签: ruby-on-rails treeview awesome-nested-set

我在rails上使用awesome nested set插件进行ruby。我如何按照:name column或者其他东西进行排序?

目前显示树状

A
- C
- B

我希望它像

A
- B
- C

5 个答案:

答案 0 :(得分:5)

这样做会覆盖数据库排序:

@item.children.except(:order).order("your_sort_column")

示例:

organization.self_and_descendants.to_sql
=> "SELECT `organizations`.* FROM `organizations`  WHERE (`organizations`.`lft` >= 1 AND `organizations`.`lft` < 54) ORDER BY `organizations`.`lft`" 

organization.self_and_descendants.except(:order).order("organization_nm").to_sql
=> "SELECT `organizations`.* FROM `organizations`  WHERE (`organizations`.`lft` >= 1 AND `organizations`.`lft` < 54) ORDER BY organization_nm" 

答案 1 :(得分:3)

不幸的是现在不可能。 在他们的课堂上写的“用lft之外的其他列进行操作不起作用”(lib / awesome_nested_set.rb)

答案 2 :(得分:2)

已在awesome_nested_set

中实施
  

order_column:在哪个列上进行排序,默认情况下是   left_column_name。示例:acts_as_nested_set:order_column =&gt;   :位置

closure_tree

  

如果您需要特定订单,请在&gt;迁移中为模型添加新的整数列:

t.integer :sort_order
  

并在您的模型中:

class OrderedTag < ActiveRecord::Base
  has_closure_tree order: 'sort_order'
end

答案 3 :(得分:1)

我确认@ kr00lix说的是什么。 我绕过这个问题的方法:

@item_children = @item.children
@item_children = @item_children.sort_by!(&:your_sort_column)

但我同意,为了避免无用的内存消耗,直接在SQL命令中设置顺序会更好。

答案 4 :(得分:0)

我能够使用递归在Rails中执行此操作:

AnyObject

然后拨打import scala.collection.mutable.MutableList var x = false while (!x) { val list = MutableList[Any]() val input = scala.io.StdIn.readLine("input pls:\n") list += input if (input == "end"){ x = true ; println("Bye!"); sys.exit} if (input =="show") {println(list)} }

但显然这涉及一系列大规模的数据库命中。

因此,如果有人知道更多关于SQL递归的信息,而不是我希望将其转换为纯SQL,那就太神奇了!

BTW,出于某种原因,以下内容对数据库来说有点小,但是没有用:

def add_self_and_children
  [self, children.sort_by{|e| e.name}.map{|c| c.add_self_and_children}].flatten
end