Это мой метод запроса в файле модели:
def self.sum_by_brand_category
result = Product.joins(:brand, :category)
.select("brands.id as brand_id, categories.id as category_id, sum(products.quantity) as count")
.group("brands.id, categories.id")
return result
end
Вот пример результата запроса базы данных, который я получаю:
[
{
"id":null,
"brand_id":43,
"category_id":1,
"count":2
},
{
"id":null,
"brand_id":43,
"category_id":2,
"count":5
},
{
"id":null,
"brand_id":43,
"category_id":3,
"count":4
},
....
]
Я ожидаю, что будет использован окончательный результат JSONво взглядах должно быть так:
[
{
"id":null,
"brand_id":43,
"quantity": [
{
"category_id": 1,
"count": 2
},
{
"category_id": 2,
"count": 5
},
{
"category_id": 3,
"count": 4
}
]
},
....
]
Как мне этого добиться?Изменить метод модели?Восстановить результат в контроллере перед отправкой в представление?и как?
Любые предложения будут оценены.Спасибо.
Обновлено :
Основываясь на ответе @cmrichards, я придумала этот закрытый метод, который вызывается в контроллере, а затем используется в представлениях.Я включаю здесь свою работу, хотя это не СУХИЕ коды:
private
def get_sum_by_brand_category
query_results = Product.sum_by_brand_category
results = []
query_results.group_by(&:brand_id).each do |brand_id, query_result|
result = {}
result[:id] = nil
result[:brand_id] = brand_id
quantity_array = []
query_result.each do |data|
quantity_block = {}
quantity_block[:category_id] = data.category_id
quantity_block[:count] = data.count
quantity_array.push(quantity_block)
end
result[:quantity] = quantity_array
results.push(result)
end
return results
end
Пожалуйста, СУШИТЕ их, если хотите, отредактировав мой вопрос.;)