Модели:
class Category < ApplicationRecord
has_many :inventories
has_many :stocks, through: :inventories
end
class Inventory < ApplicationRecord
belongs_to :category
has_many :stocks
end
class Stock < ApplicationRecord
belongs_to :inventory
end
Цель:
Получите эффективный запрос ActiveRecord, который создает массив следующим образом:
[
{ name: "Supplies", count: 10.00, total_value: 40.00 },
{ name: "Materials", count: 25.00, total_value: 30.00 }
]
name -> обычный атрибут в модели инвентаризации
count -> сумма SQL в столбце: count в таблице запасов
total_value -> из метода в модели инвентаризации, который выполняет некоторые математические операции
Это может быть полная фантазия, но у меня большой набор данных, поэтому я пытаюсь сделать этот гиперэффективный. Есть идеи?
Изменить для ответа на вопрос:
total_value - метод в Inventory, который затем вызывает сумму метода в Stock:
def total_value
stocks.map do |stock|
stock.total_cost
end.sum
end
total_cost - это метод на складе:
def total_cost
cost_per_unit * count
end