0

ページの 1 つで実行するクエリがあります。基本的にトランザクション テーブルを通過し、各トランザクションの支払いを結合し (多対 1 関連付け)、トランザクションの「残高」フィールドを計算し (select を使用)、これによって注文し、トップ 10 を返します。

こんなふうになります:

@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部分を追加したときにのみ削除されました。その理由はありますか?

計算フィールド (注文と所有) の両方を使用し、すべての基準に合格したレコードの支払いデータのみを含めるにはどうすればよいですか?

ありがとう!

4

1 に答える 1