假设有一个名为User的模型。这有属性:爱好。
user = User.first
user.hobbies
=> ["Bowling", "Cooking", "Knitting"]
如果我想使用.where搜索:hobbies属性,我该怎么做?我正在使用postgresql和
:hobbies, :text, array:true
User.where(爱好:“我放在这里的任何东西,字符串数组,哈希”)抛出错误
ActiveRecord::StatementInvalid: PG::InvalidTextRepresentation: ERROR: malformed array literal:
答案 0 :(得分:1)
请记住,您可以通过将字符串传递给where
来使用您想要的任何SQL,例如:
User.where("hobbies @> ARRAY['Bowling', 'Cooking', 'Knitting']")
或
User.where("hobbies && ARRAY['Bowling', 'Cooking', 'Knitting']")
Postgres拥有良好的array operators可用文档。
答案 1 :(得分:0)
您可以从postgres_ext
gem尝试contains
或overlap
。只需安装gem然后查询:
query = ["Bowling", "Cooking", "Knitting"]
#With Overlap operator:
User.where.overlap(hobbies: query)
#or with Contains Operator
User.where.contains(hobbies: query)