До сих пор не ясно, что вам нужно.Более того, использование цепочки методов Ареля для таких вещей делает их более сложными.
Если вы хотите получить список городов с суммой сумм из таблицы A плюс модификатор из таблицы B, то его можно получить с помощью одного SQL-query.
(при условии, что вы используете PostgreSQL):
SELECT T.city, COALESCE(T.amount, 0) + COALESCE(B.modifier, 0) AS modified_sum
FROM (SELECT city, SUM(amount) AS amount FROM table_a GROUP BY city) T
FULL JOIN table_b B ON B.city = T.city;
http://rextester.com/OSS97422
Если у вас есть модели TableA и TableB, тогда запрос можно преобразовать вметод Rails:
TableA.find_by_sql "SELECT T.city, COALESCE(T.amount, 0) + COALESCE(B.modifier, 0) AS amount
FROM (SELECT city, SUM(amount) AS amount FROM #{TableA.table_name} GROUP BY city) T
FULL JOIN #{TableB.table_name} B ON B.city = T.city"
Если ваша задача - получить значение для «Атланта», то вызов метода будет:
TableA.find_by_sql ["SELECT T.city, COALESCE(T.amount, 0) + COALESCE(B.modifier, 0) AS amount
FROM (SELECT city, SUM(amount) AS amount FROM #{TableA.table_name} GROUP BY city) T
LEFT JOIN #{TableB.table_name} B ON B.city = T.city
WHERE T.city = :city", { city: 'Atlanta' }]
Обратите внимание FULL JOIN
в первом случаеи LEFT JOIN
в последнем.Для 1-го запроса FULL JOIN
предоставляет города из обеих таблиц A и B. Для 2-го вызова запрос ищет 'Atlanta' в таблице A.
Если ваша задача отличается, вы можете изменить эти вызовы по мере необходимости.