Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails JSONB和x27上的导轨;其中';嵌套对象数组中的多个搜索项_Ruby On Rails_Postgresql_Jsonb - Fatal编程技术网

Ruby on rails JSONB和x27上的导轨;其中';嵌套对象数组中的多个搜索项

Ruby on rails JSONB和x27上的导轨;其中';嵌套对象数组中的多个搜索项,ruby-on-rails,postgresql,jsonb,Ruby On Rails,Postgresql,Jsonb,在Rails中,表概要文件上有一个jsonb列,其结构如下 add_column :profile, :properties, :jsonb, default: {} user.build_profile( properties: { languages: [ {name: "German", level: 3}, {name: "Russian", level: 2}, {name: &qu

在Rails中,表概要文件上有一个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或y)

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

我怎样才能做到


提前感谢

不熟悉JSONB,但ActiveRecord确实支持类似于和的操作符

@profiles.where(“properties@>?,{'languages':[{'name':'derman'}]}.to_json)。
和(@profiles.where(“properties@>?,{'languages':[{'name':'Russian'}]}.to_json))

在提出这个问题之前,我已经考虑过这个选项,但是既然没有人能找到另一种优雅的方式,我会选择你的答案。谢谢
@profiles.where("properties -> 'skills' ?| array[:skills]", skills: ['Alpha', 'Beta'])