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

时间:2015-03-18 17:41:01

标签: ruby-on-rails postgresql rails-activerecord hstore

我在我的Rails项目中使用Postgres和hstore。我将地址信息(街道,城市,邮编,国家,......)存储在名为"地址"的hstore列中。我可以在数据库中查询这样的城市:

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

完美无缺。

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

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

当然它没有那样工作。有谁知道如何从my_array_of_many_countries数组中存储的国家/地区获取所有公司?

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:-1)

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

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

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