我在一个ruby应用程序中有一个过滤器数组,它对Postgres连接进行原始SQL查询我正试图找出如何将这个数组序列化为可查询的内容,
即:SELECT * FROM data WHERE strings IN #{strings_array}
我找不到任何资源。序列化此查询的正确方法是什么?
编辑:我最终发现:
query = ''
arr.each_with_index { |e, i|
if i == arr.length - 1
query += "#{e}"
else
query += "#{e},"
end
}
然后
" AND column @> ('{#{query}}')"
但是一定有一个不那么冗长的方法,不是吗?
最佳答案:
你说你用续集。Sequel可以自动执行这种查询:
DB[:data].where(strings: ["my", "array", "of", "strings"])
# => #<Sequel::Postgres::Dataset: "SELECT * FROM \"data\" WHERE (\"strings\" IN ('my', 'array', 'of', 'strings'))">
手工构造SQL查询是有风险的,尤其是在处理来自用户的数据时。