Вопрос

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

Пользователь: has_many покупки
Пункт: has_many покупки

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

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

Я начал со следующими, но, очевидно, это неправильно ... (он не будет «включать» покупки, которые имеют предмет с отрицательным элементом. Amount ...)

@users = user.find (: все,
: включить => {: покупки =>: элемент},
: select => "сумма (item.amount)",
: заказ => "...",
: Условия => "...",
: group => "users.id",
: имея => "сумму (item.amount)> 0")

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

Это было полезно?

Решение

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

User.all(:joins => items, :group => "users.id", 
          :having => "SUM(items.amount) > 0")

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top