Ruby on rails JSONB和x27上的导轨;其中';嵌套对象数组中的多个搜索项
在Rails中,表概要文件上有一个jsonb列,其结构如下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
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'])