2012-07-12 31 views
0

查询,这是原始查询轨道重构正确sql注入

where(countries.map{|c| "zones.countries LIKE '%#{c}%'"}.join(' OR ')) 

现在我想重写此查询使用?这样的运营商

where(countries.map{|c| "zones.countries LIKE ?", "%#{c}%"}.join(' OR ')) 

但它不起作用。任何建议? THX

+0

尝试此之前的SO问题:http://stackoverflow.com/questions/4430578/how-to-do-like-query-in-arel-and-rails-3 – MrDanA 2012-07-12 13:21:03

+0

@davide - 您正在编写的查询的一个性能提示。 1.循环查询不是一个好主意2.使用具有多个OR的Like子句会减慢查询速度。尝试将Like转换为=并获取记录。此查询不会在大型数据集上扩展。只是抛出这个想法让我知道这听起来对你来说。 – Raghu 2012-07-12 13:30:23

回答

1
where(countries.map { |c| "zones.countries LIKE ?" }.join(" OR "), *countries.map{ |c| "%#{c}%"}) 

,可随时更换where上面像这样的第一个参数,以避免一个循环

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

这是一个好主意 – 2012-07-12 16:07:13