Связанные модели и SUM-запрос в Rails - PullRequest
8 голосов
/ 05 декабря 2010

У меня есть две модели Rails, скажем, ребенок и родитель.

Я знаю, что могу сделать это:

Child.sum(:income, :conditions => "parent_id = #{@parent_id}")

Но я хочу быть в состоянии сделать это:

Parent.children.sum(:income)

Но это дает мне неправильные значения, если я попробую это.Есть ли более краткий способ написания

Child.sum(:income, :conditions => "parent_id = #{@parent_id}")

?

TIA

[ps: среда разработки Rails 3]

Ответы [ 4 ]

13 голосов
/ 05 декабря 2010

Извините, но я только что узнал ответ на этот вопрос.Мне нужно было добавить to_a в коллекцию дочерних объектов и вызвать процедуру следующим образом:

Parent.children.to_a.sum(&:income)

Это работает с очарованием.

4 голосов
/ 14 ноября 2013

Извините, что поднял старую ветку, но я думаю, что нашел лучшее (лучшее?) Решение.Ниже приведен код моего проекта, который я закончил

3 голосов
/ 06 января 2016

Я столкнулся с проблемой, когда ребенок делегировал родителю, и мне нужно было найти сумму.

children.to_a.sum(:parent_income)

давало мне серьезную проблему N + 1. Решение было использовать:

children.joins(:parent).sum(:income)
0 голосов
/ 15 июня 2016

Я также столкнулся с подобной ситуацией, здесь было решение в рельсах 4 с проверкой, были ли элементы подсчета активны или неактивны. Я запустил это в модели, прежде чем сохранить.

order_items.collect { |oi| oi.valid? ? (oi.quantity * oi.price) : 0 }.sum
...