我想形成以下查询:
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 gem 网站上看到的小技巧
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 答案,我也可以尝试一下。
- 导轨 3.2.13
- 红宝石 1.9.3-p392