以下のクエリを使用して、ID のコレクションに基づいて複数のテーブルからレコードを取得しようとしていますが、正常に動作しています。
アクティブ レコード クエリ:
Song.order("songs.id desc")。includes(:アーティスト).includes(:アルバム). joins("LEFT JOIN アーティスト ON songs.artist_id = artist.id"). joins("LEFT JOIN アルバム ON songs.album_id = albums.id"). where("(songs.id)
IN (#{song_ids*','})
AND (LOWER(songs.title) LIKE :term OR LOWER(artists.name) LIKE :term OR LOWER(albums.title) LIKE :term)", :term => "%#{terms[index].downcase}% ")
PG クエリ出力:
SELECT "songs".* FROM "songs" LEFT JOIN アーティスト ON 曲.artist_id = artist.id LEFT JOIN アルバム ON 曲.album_id = albums.id WHERE (
(songs.id) IN (4,5,28,37,46,48)
AND (LOWER(songs.title) LIKE '%wo%' OR LOWER(artists.name) LIKE '%wo%' OR LOWER(albums.title) LIKE '%wo%')) ORDER BY song.id desc
しかし、以下の
ACTIVE RECORD QUERYのようにクエリを変更しようとしていたとき:
Song.order("songs.id desc")。includes(:アーティスト).includes(:アルバム). joins("LEFT JOIN アーティスト ON songs.artist_id = artist.id"). joins("LEFT JOIN アルバム ON songs.album_id = albums.id"). where("(songs.id)
IN (:song_ids)
AND (LOWER(songs.title) LIKE :term OR LOWER(artists.name) LIKE :term OR LOWER(albums.title) LIKE :term)",
:term => "%#{terms[index].downcase}%",:song_ids => song_ids*',')
PG クエリ出力:
SELECT "songs".* FROM "songs" LEFT JOIN アーティスト ON 曲.artist_id = artist.id LEFT JOIN アルバム ON 曲.album_id = albums.id WHERE (
(songs.id) IN ('4,5,28,37,46,48')
AND (LOWER(songs.title) LIKE '%wo%' OR LOWER(artists.name) LIKE '%wo%' OR LOWER(albums.title) LIKE '%wo%')) ORDER BY song.id desc
一重引用符のため、上記のクエリは機能しません。