我在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})")
只有当数组只包含字符串时,这才有效。顺便说一句,还没有测试过。