2016-07-08 3 views
0

Внутри моей модели базы данных, у меня есть поле JSon, который имеет следующую структуру:Active Record: JSON Запрос

json_field: {"data"=>{"key_1"=>"value1", "key_2"=>"value"} } 

Попытка запроса это с помощью выбора:

Model.select(:id, "json_field -> 'data'") 
Model.select(:id, "json_field -> 'data' as data") 

дает массив объектов, но без выбранного поля json.

#<ActiveRecord::Relation [#<Model id: 1, Model id: 2 ...>] 

Спасибо за любую помощь.

ответ

2

Это:

#<ActiveRecord::Relation [#<Model id: 1, Model id: 2 ...>] 

является результатом вызова inspect по запросу и inspect будут отображаться только столбцы, что модель знает об этом. Модель будет запрашивать таблицу для столбцов во время запуска, поэтому она будет знать только о столбцах, которые фактически находятся в таблице.

ActiveRecord создает методы доступа к столбцам на лету с использованием method_missing, поэтому он может создавать методы в запросе, которые не являются столбцами в фактической таблице.

Так что ваши data есть, вы просто должны попросить его по имени, например:

Model.select(:id, "json_field -> 'data' as data").map(&:data) 

даст вам data значения.

+0

Я думаю, вы узнаете что-то новое каждый день, спасибо! –

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