1

追加の計算を行うために自分自身を結合したい複雑なクエリがあります。SQLで私はすることができます

SELECT t1.*, t2.*
FROM (SQL) AS t1
INNER JOIN
(SQL) AS t2
ON t1.num = t2.num - 1

SQLが私が参加したいクエリであると仮定します。

ActiveRecord / arel(または他の何か)を使用してRailsでこれを実行し、ActiveRecord :: Relationshipを取得し、where()を使用できるようにする方法。

sqlとexecute/select_allを使用して実行すると、PG:resultまたはhashが取得され、memthodの場所を使用できなくなります。

4

1 に答える 1

3

最初の解決策は、to_sqlメソッドを使用して他のクエリを補間することです。

Place.select("places.*, communes.*").joins("INNER JOIN (#{
  Commune.where(:id => [1,2,3]).to_sql
}) as communes ON communes.id = places.commune_id")

2番目の解決策は、Arelのマージ方法を使用することです。

Place.select("places.*, communes.*")
  .joins(:commune)
  .merge(Commune.where(:id => [1,2,3]))
于 2012-09-26T14:34:56.103 に答える