如何删除活动记录查询中的引号

时间:2012-10-31 14:39:43

标签: ruby-on-rails ruby-on-rails-3

我正在尝试根据起诉的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

由于单引号,上述查询无效。

1 个答案:

答案 0 :(得分:1)

尝试将:song_ids => song_ids*','替换为:song_ids => song_ids

在原始代码中,您将song_ids转换为字符串,该字符串已被转义并且单引号用于标记它是一个字符串。这只将数组作为参数传递,rails将完成魔法并将其转换为类似4,5,28,37,46,48(你仍然需要括号)。