2016-10-18 2 views
0

Скажем, у меня есть модель Neighborhood, которая имеет jsonb поле [] families, который представляет собой массив, содержащий объекты JSON с любым типом ключа значения спаривания, как так [{"name":"Smiths", "count":4}, {"name":"Miller","out_on_vacation":false}, {"name":"Bennet", "house_color":"red", "count": 4}]Rails Postgres фильтрации для объекта jsonb внутри jsonb массива

Я хочу сделать запрос activerecord, чтобы найти окрестности для окрестностей, имеющих определенные объекты внутри своего массива families. Итак, если бы я сделал что-то вроде Neighborhood.where({families: {count: 4}), результатом были бы любые модели окрестностей, чье семейство содержит объект jsonb с парным значением ключа count: 4. Я играл с кучей разных запросов, но, похоже, не могу заставить их работать, не получив ошибку. Как я могу написать запрос Activerecord, чтобы получить желаемые результаты?

EDIT: я запустить миграцию так:

def change 
    add_column :neighborhoods, :families, :jsonb, array: true, default: [], index: true 
end 

ответ

0

Я считаю, что вы могли бы сделать что-то вроде:

Neighborhood.where("families -> 'count' ? 4") 

Эта статья может помочь вам: http://nandovieira.com/using-postgresql-and-jsonb-with-ruby-on-rails

edit: Просто заметили, что у вас есть массив внутри jsonb, поэтому это, вероятно, не сработает.

Редактировать 2: Об этом ответил Reddit и работал для меня. Отвечая здесь как ссылка на себя.

Neighborhood.where %q(families @> '[{"count":?}]'), 4 
+0

хммм, это все еще не работает для меня по какой-то причине, я сделал миграцию, чтобы добавить jsonb [] столбец, который я писал в вопрос под заголовком редактирования. всякий раз, когда я пытаюсь «Neighborhood.where% q (family @> '[{" count ":?}]'), 4' Я получаю' ERROR: неверный массив литерала' и подробное высказывание '' ["должно вводить явно заданные размеры массива. «Вы знали, почему это было бы случайно? – user3769323

+0

Вы случайно использовали индекс? – user3769323

Смежные вопросы