MySQL / Ruby on Rails - Как "SUM" в случае: has_many - PullRequest
0 голосов
/ 07 июля 2010

У меня есть следующие таблицы:

Пользователь: has_many Закупки
Товар: has_many Закупки

У элемента есть столбец "сумма" (может быть + или-) и мне нужно найти всех пользователей с положительной суммой «Item.amounts» (по всем покупкам, совершенным каждой из них).

Как выглядит этот запрос?(Я не уверен, как правильно обрабатывать «СУММУ», в данном случае.)

Я начал со следующего, но, очевидно, это неправильно ... (он не будет "включать" покупки, которыеиметь элемент с отрицательным значением Item.amount ...)

@ users = User.find (: все,
: include => {: покупки =>: элемент},
: select => "SUM (item.amount)",
: order => "...",
: условие => "...",
: group => "пользователи.id ",
: Имея =>" СУММА (item.amount)> 0 ")

Спасибо за вашу помощь с этим!
Том

Ответы [ 2 ]

1 голос
/ 08 июля 2010

Попробуйте это:

User.all(:joins => items, :group => "users.id", 
          :having => "SUM(items.amount) > 0")
0 голосов
/ 07 июля 2010

Похоже, это хороший случай для некоторых модельных методов.

Я не проверял это, но я думаю, что вы хотите сделать что-то похожее на следующее:

class User < ActiveRecord::Base

has_many :purchases
has_many :items, :through => :purchases

def items_total
  #get all the items iterate over them to get the amount, 
  #compact to get rid of nils
  #and reduce with a sum function to total and return
  items.all.each{|item| item.amount}.compact.reduce(:+)
end

тогда

User.items_total

...