Rails JSONB 'where' 嵌套对象数组中的多个搜索词

Rails on JSONB 'where' multiple search terms in nested array of objects

我在 Rails table 配置文件中有一个 jsonb 列,结构如下

add_column :profile, :properties, :jsonb, default: {}

user.build_profile(
  properties: {
    languages: [
        {name: "German", level: 3}, 
        {name: "Russian", level: 2},
        {name: "English", level: 3}
    ],
    skills: ['Alpha', 'Beta', 'Gamma']
  }
)

user.build_profile(
  properties: {
    languages: [
        {name: "German", level: 2}, 
        {name: "Russian", level: 3},
        {name: "Spanish", level: 3}
    ],
    skills: ['Alpha','Beta']
  }
)


user.build_profile(
  properties: {
    languages: [
        {name: "Italian", level: 2}, 
        {name: "Spanish", level: 3}
    ],
    skills: ['Gamma']
  }
)

我能够像这样检索一种语言

@profiles.where("properties @> ?", {'languages': [{'name':'German'}] }.to_json)

和多项技能 (x OR y) 如此

@profiles.where("properties -> 'skills' ?| array[:skills]", skills: ['Alpha', 'Beta'])

但我需要检索多种语言查询词德语和俄语

如何实现?

提前致谢

不熟悉 JSONB,但 ActiveRecord 确实支持 and 运算符,例如

@profiles.where("properties @> ?", {'languages': [{'name':'German'}] }.to_json).
  and(@profiles.where("properties @> ?", {'languages': [{'name':'Russian'}] }.to_json))

https://api.rubyonrails.org/classes/ActiveRecord/QueryMethods.html#method-i-and