Ruby on rails rails重构查询以实现正确的sql注入

Ruby on rails rails重构查询以实现正确的sql注入,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,这是原始查询 where(countries.map{|c| "zones.countries LIKE '%#{c}%'"}.join(' OR ')) 现在我要用什么重写这个查询?像这样的接线员 where(countries.map{|c| "zones.countries LIKE ?", "%#{c}%"}.join(' OR ')) 但它不起作用。有什么建议吗? thx 您可以将上面的where的第一个参数替换为类似的内容,以避免一个循环 ("zones.countries LI

这是原始查询

where(countries.map{|c| "zones.countries LIKE '%#{c}%'"}.join(' OR '))
现在我要用什么重写这个查询?像这样的接线员

where(countries.map{|c| "zones.countries LIKE ?", "%#{c}%"}.join(' OR '))
但它不起作用。有什么建议吗? thx

您可以将上面的
where
的第一个参数替换为类似的内容,以避免一个循环

("zones.countries LIKE ? OR " * countries.size).gsub(/ OR $/, '')

试试前面的SO问题:@davide-您正在编写的查询的一个性能提示。1.循环查询不是一个好主意。将Like子句与多个OR一起使用会降低查询速度。尝试将其转换为Like=并获取记录。此查询无法在大型数据集上扩展。放弃这个想法,让我知道你觉得怎么样。
("zones.countries LIKE ? OR " * countries.size).gsub(/ OR $/, '')