2012-07-12 28 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