2017-01-02 2 views

ответ

3

Если вы хотите разреженную ActiveRecord модель экземпляра для хранения данных (а не примитивов в массиве), вы просто используете select:

model = Model.select("data -> 'special_date' as special_date'").first 
model.id #=> nil 
model.special_date = #=> "Wed, 23 Mar 2016 11:20:20 -0700" 

Если вы хотите извлечь всю запись, а также особенности часть данных внутри jsonb колонок, вы можете цепи на select:

model = Model.select('*').select("data -> 'special_date' as special_date").first 
model.id #=> 42 
model.special_date #=> "Wed, 23 Mar 2016 11:20:20 -0700" 

Если не нужен экземпляр ActiveRecord вообще, просто использовать потроха:

Model.pluck("data -> 'special_date' as special_date") 
+0

Я не хочу возвращать всю запись. Я просто хочу дублировать функциональность Model.select (: field), но нацелить его на подкомпонент jsonb-поля. – Carpela

0

Это не является совершенным, поскольку он использует срывать, а не выбирать, но

Model.pluck("data -> 'special_date'") 

или, если вам нужно больше, чем один столбец

Model.pluck(:id, "data -> 'special_date'") 

работает.

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