То есть ситуация какова - есть два агрегированых запроса на разные таблицы по одинаковому полю (это поле есть и в первой и во второй таблице, например, группируем по user_id товары и заказы, при этом используем SUM, COUNT и тд).
Выход есть такой - агрегируем сначала товары по user_id, потом проходим .each() по записям и вытаскиваем заказы по условию WHERE user_id=user.id и там пушим в массив. Но это ужас будет для большого кол-ва товаров, так как кол-во запросов=колвоТоваров+1, ну то есть запрос в цикле это совсем "по-нубски".
В PHP я делал как - две группировки с одинаковыми индексами (user_id), а потом array_replace_recursive справлялся отлично со своей работой. А как тут? Вот какие данные мне возвращает AR
- !ruby/object:Track
attributes:
clicks: 7
hosts: 3
campaign_id: 4
id: 1
- !ruby/object:Track
attributes:
clicks:
hosts: 1
campaign_id: 2
id: 2
и
- !ruby/object:Conversion
attributes:
count_conversions: 2
id: 1
И хочется получить вот такое
- !ruby/object:Track
attributes:
clicks: 7
count_conversions: 2 // вот эти данные "вмержились" по индексу id=1
hosts: 3
campaign_id: 4
id: 1
- !ruby/object:Track
attributes:
clicks:
hosts: 1
campaign_id: 2
id: 2
Еще, как я понимаю, есть "ручной" способ прохода по первому массиву, потом в каждой итерации первого массива проход по второму массиву и со сравнениями. Но это мне тоже кажется чем-то страшным. Интерпретатор будет материться.
Подскажите пожалуйста, как бы вы сделали подобный мерж с точки зрения как самого языка руби с его фреймом, так и с точки зрения оптимизации скорости выполнения скрипта. Если кому-то не понятно стало мое объяснение, прошу прощения, спрашивайте, я разъясню. Надеюсь на помощь. Спасибо.