我在 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。 Sequel 可以自动执行这种查询:
DB[:data].where(strings: ["my", "array", "of", "strings"])
# => #<Sequel::Postgres::Dataset: "SELECT * FROM \"data\" WHERE (\"strings\" IN ('my', 'array', 'of', 'strings'))">
“手动”构建 SQL 查询是有风险的,尤其是当您处理来自用户的数据时。
我是一名优秀的程序员,十分优秀!