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



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

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

工作非常完美。

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

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

当然不是那样的。有人知道我如何将来自国家的所有公司存储在我的my_array_of_many_countries数组中吗?

非常感谢您的帮助。

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

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

请不要在构建SQL时使用字符串插值,除非你真的需要这样做,并且你对正确转义和引用所有内容都很谨慎。

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

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})")

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

最新更新