0
我想形成以下查詢:ActiveRecord的使用數組的數組作爲參數
SELECT tracked_points.*
FROM tracked_points
WHERE
(id = 87 AND zone_id = 457)
OR
(id = 88 AND zone_id = 457)
我輸入功能將是[id, zone_id]
嵌套數組,喜歡的東西:
[[87, 457], [88, 457]]
我試過一個小竅門,我在squeel寶石現場看到
arr = [[87, 457], [88, 457]]
TrackedPoint.where((["(id = ? AND zone_id = ?)"] * arr.size).join(" OR "), *arr)
但它不喜歡以嵌套數組作爲參數。
我想出只是解決方案編譯SQL字符串,但不使用預處理語句的任何參數衛生:
matches = arr.map do |i|
"(id = #{i[0]} AND zone_id = #{i[1]})"
TrackedPoint.where(matches.join(" OR ")
我有一種感覺,答案是可能的squeel,但如果有一個純粹的ActiveRecord答案我是遊戲也嘗試了。
- 的Rails 3.2.13
- 紅寶石1.9.3-P392
ActiveRecord是相當有限的創建複雜的查詢。沒有像squeel這樣的外部附加組件,我認爲你不會比生成這個字符串做得更好。即使你會在SQL中發現一些有趣的更好的方法,你仍然會產生續集字符串。 –
@EdgarsJekabsons任何想法如何我可以添加參數消毒這種方法? –
看看這個方法:http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/Quoting.html#method-i-quote 我把它放在連接對象上,所以你應該可以訪問它像這樣:'TrackedPoint.connection.quote'。 –