Запрос массива json с помощью Active Record (Rails 4/postgresql9.4)

У меня есть модель сделки, у которой есть атрибут под названием «информация» с этой структурой:

Внутри столбца «информация» о сделке:

Deal1.info = [{"deal_id":"4","text1":"qqq","text2":"sqsq","image1":"sqqs","video1":"sqsq"},{"deal_id":"5","text1":"sqqs","text2":"qq"}]

# no image here inside the json
Deal2.info = 
[{"deal_id":"4","text1":"qqq","video1":"sqsq"},{"deal_id":"5","text1":"sqqs","text2":"qq"}]

Столбец был определен в млиграции как json

add_column :deals, :info, :json, default: '[]'

Как я могу запросить это в jsonb с активной записью?

  • найти все сделки, информация о которых содержит хотя бы один Deal_id = 4

  • найти все сделки, в которых информация содержит как минимум блок json ({}) с ключом под названием «image1» (он должен выводить только Deal1 , а не Deal2)


person Mathieu    schedule 16.07.2015    source источник


Ответы (1)


У меня был похожий столбец, и мне пришлось изменить тип столбца с json на jsonb.

add_column :deals, :info, :jsonb, default: [], null: false, index: true

После получения типа данных jsonb я смог выполнить этот тип запроса ActiveRecord.

Info.where('deals @> ?', '[{"deal_id":"4"}]')

Я пока не совсем уверен, как написать все это с помощью activerecord (http://www.postgresql.org/docs/9.4/static/functions-json.html#FUNCTIONS-JSONB-OP-TABLE), чтобы достичь второго пункта.

person twmulloy    schedule 21.07.2015