Rails/Postgres 如果 hstore 值包含传递的数组值,如何查询它

Rails/Postgres How to query hstore value if it contains value of passed array

我在我的 Rails 项目中使用 Postgres 和 hstore。我将地址信息(街道、城市、邮政编码、国家/地区等)存储在名为 "address" 的 hstore 列中。我可以像这样查询某个城市的数据库:

Company.where("address -> 'country' = 'Finland'")

完美运行。

我想做的是在数据库中查询一组这样的国家:

Company.where("address -> 'country' IN my_array_of_many_countries")

当然不是这样的。有谁知道如何从存储在我的 my_array_of_many_countries 数组中的国家/地区获取所有公司?

非常感谢任何帮助。

最简单的解决方案是将数组转换为字符串:

my_array_of_many_countries = ['France', 'Germany']
my_array_of_many_countries_string = "'#{my_array_of_many_countries.join("','")}'"
Company.where("address -> 'country' IN (#{my_array_of_many_countries_string})")

这仅在您的数组仅包含字符串时才有效。 顺便说一句,还没有测试过。

ActiveRecord 知道如何处理 Ruby 数组,所以让它完成它的工作:

Company.where("address -> 'country' IN (?)", my_array_of_many_countries)

请不要使用字符串插值来构建 SQL,除非您确实需要那样做,并且您对正确转义和引用所有内容都一丝不苟。