У меня есть в 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 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
Я рассмотрел этот вариант до того, как задал вопрос, но поскольку никто не смог найти другого элегантного способа, я выберу ваш ответ. Спасибо