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,除非您确实需要那样做,并且您对正确转义和引用所有内容都一丝不苟。
我在我的 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,除非您确实需要那样做,并且您对正确转义和引用所有内容都一丝不苟。