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
我在 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