按子(嵌套)元素排序

时间:2014-02-09 16:40:10

标签: ruby-on-rails ruby-on-rails-4

我有一个Category模型,其中包含父类别和子类别(acts_as_nested_set)。每个类别都有balance,我想按照“家庭平衡”的总和来订购父类别。

通过“家庭平衡”我的意思是:

def children_categories(c)
  current_user.categories.where(parent_id: c.id)
end

def family_balance(c)
  c.balance + children_categories(c).sum(:balance)
end

我在帮助器中使用这些方法在视图中显示它,但我不知道如何在控制器中的family_balance方法中使用order

事实上我需要这样的东西才能起作用:

@parent_categories = current_user.categories.where(parent_id: nil).order(family_balance: :asc)

谢谢!

1 个答案:

答案 0 :(得分:0)

方法order向SQL请求添加ORDER BY指令。您无法使用它,因为family_balance不是表的列。而是将sort_by用于关系返回的集合:

current_user.categories.where(parent_id: nil).sort_by(&:family_balance)