У меня есть запрос, который я запускаю на одной из моих страниц. Он в основном проходит через таблицу транзакций, присоединяется к платежам за каждую транзакцию (ассоциация «многие-к-одному»), вычисляет поле «баланс» в транзакции (с выбором), заказывает ее и возвращает верхнюю часть 10.ActiveRecord - не использовать включить при использовании порядка в вычисленном поле
это выглядит следующим образом:
@high_balance_transactions = Transaction.
joins(:payments).
select(["transactions.*", "SUM(...) as balance"]).
group(:id).
having("balance < 0").
order(:balance).
limit(10)
Тогда, на мой взгляд, я ставлю те в таблице и нужны данные от самих платежей, так что я в конечном итоге с большим количеством запросов («N + 1» проблемы. ..).
Я пытался добавить .includes(:payments)
на запрос, но получил эту ошибку:
ActiveRecord::StatementInvalid: Mysql2::Error: Unknown column 'balance' in 'order clause'
я вижу в SQL, который следует за ошибку, которая ActiveRecord не добавляет мой вычисленное поле в запросе он делает, но удалил его только тогда, когда я добавил часть includes
. Есть ли причина для этого?
Как я могу использовать как вычисленное поле (для заказа и наличия), так и включать данные оплаты только для записей, которые соответствуют всем критериям?
Спасибо!
Спасибо! оно работает. Действительно не самый красивый SQL, но теперь все остальные запросы показаны как CACHE, а не Load и принимают 0ms .. :) –