我正在尝试根据起诉的ids的集合从多个表中检索记录
在查询下方,它工作正常。
ACTIVE RECORD QUERY:
Song.order(“songs.id desc”)。 包括:(:艺术家).includes(:专辑)。 加入(“LEFT JOIN艺术家ON songs.artist_id = artists.id”)。 加入(“LEFT JOIN专辑ON songs.album_id = albums.id”)。 其中(“(songs.id)
IN(#{song_ids *','})
AND(LOWER(songs.title)LIKE:term OR LOWER(artists.name)LIKE:term OR LOWER(albums.title)LIKE:term)“, :term => “%#{术语[指数] .downcase}%”)
PG QUERY OUTPUT:
SELECT“songs”。* FROM“songs”LEFT JOIN艺术家ON songs.artist_id = artists.id LEFT JOIN专辑ON songs.album_id = albums.id WHERE(
(songs.id)IN(4,5,28,37,46,48)
AND(LOWER(songs.title)LIKE'%wo%'或LOWER(artists.name)LIKE '%wo%'或LOWER(albums.title)LIKE'%wo%'))ORDER BY songs.id desc
但我正在尝试修改查询,如下所示
ACTIVE RECORD QUERY:
Song.order(“songs.id desc”)。 包括:(:艺术家).includes(:专辑)。 加入(“LEFT JOIN艺术家ON songs.artist_id = artists.id”)。 加入(“LEFT JOIN专辑ON songs.album_id = albums.id”)。 其中(“(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 QUERY OUTPUT:
SELECT“songs”。* FROM“songs”LEFT JOIN艺术家ON songs.artist_id = artists.id LEFT JOIN专辑ON songs.album_id = albums.id WHERE(
(songs.id)IN('4,5,28,37,46,48')
AND(LOWER(songs.title)LIKE'%wo%'或LOWER(artists.name)LIKE '%wo%'或LOWER(albums.title)LIKE'%wo%'))ORDER BY songs.id desc
由于单引号,上述查询无效。
答案 0 :(得分:1)
尝试将:song_ids => song_ids*','
替换为:song_ids => song_ids
。
在原始代码中,您将song_ids转换为字符串,该字符串已被转义并且单引号用于标记它是一个字符串。这只将数组作为参数传递,rails将完成魔法并将其转换为类似4,5,28,37,46,48(你仍然需要括号)。