Группировать и рассчитывать товары по товарам из заказов - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть эти три модели:

class Order
  has_many :items
end

class Item
  belongs_to :order
  belongs_to :product
end

class Product
  has_many :orders, through: :items
  has_many :items
end

И мне нужно составить список того, сколько каждого товара находится в заказах за данный диапазон дат.

У меня естьобъем, чтобы получить все заказы в диапазоне дат:

Order.date_range(from, to)

Теперь мне нужно сгруппировать и считать;в модели элемента есть поля product_id и units.

Я видел решения, но только в случае с двумя таблицами (заказ> продукт), но не с тремя (заказ> элемент> продукт).

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Вы можете добавить отношение has_many :products, through: :items к модели заказа.

Тогда Order.date_range(from, to).joins(:products).group(:product_id).count (Вы также можете сделать group('products.id'))

Если столбец items.units не всегда равен 1 и его необходимо суммировать по сумме, вы можете сделать: Order.date_range(from, to).joins(:products).group(:product_id).sum(:units)

Возвращение будет хешем {product1.id => count(product1.id), ...} или {product1.id => sum(units1), ...} соответственно для каждого продукта в заказе.

0 голосов
/ 12 декабря 2018

В этом конкретном случае вы можете запрашивать предметы напрямую, а не заказы, это может упростить вещи, работая всего с 2, а не с 3 таблицами.

Item.joins(:order).where(orders: {created_at: @from..@to}).group('product_id, category, code').pluck('items.product_id, sum(items.units)')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...