2014-02-09 5 views
1

У меня есть модель 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) 

Спасибо!

ответ

0

Метод order добавить инструкцию ORDER BY в запрос SQL. Вы не можете использовать его, потому что family_balance не является столбцом таблицы. Вместо этого используйте sort_by к коллекции, возвращенной соотношением:

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

Отлично. Он работает, но мне пришлось создать новый метод 'family_balance' в модели' Category'. –

Смежные вопросы