我如何在.where中使用数组搜索模型?

时间:2016-03-21 05:04:51

标签: ruby-on-rails ruby postgresql

假设有一个名为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:

2 个答案:

答案 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尝试containsoverlap。只需安装gem然后查询:

query = ["Bowling", "Cooking", "Knitting"]

#With Overlap operator:
User.where.overlap(hobbies: query)

#or with Contains Operator
User.where.contains(hobbies: query)