У меня есть приложение Rails, которое использует столбец JSONB в Postgres, и без каких-либо других гемов я могу вызвать следующие ключи, чтобы получить ключи ...
Учитывая модель Inspections
со столбцом JSONB под названием «результаты», которые я могу сделать:
@some_inspection = Inspection.first
@some_inspection.results
#=> {"assigned_to" => "John Smith", "inspection_date" => "2020_01_02", "passed" => "true"}
@some_inspection.results.keys
#=> ["assigned_to", "inspection_date", "passed"]
У меня сложилось впечатление, что большое преимущество наличия столбца JSONB состоит в том, что он легко переводится для меня. У меня нет ни attr_json
, ни какого-либо другого специализированного кода в моей модели. Как так много Ruby и Rails "это просто работает". Я передаю его как га sh, и он хранит его как JSON, и когда я его спрашиваю, я получаю га sh. Затем я могу использовать любые методы ha sh, например .values
или .keys
. Если мне нужно JSON назад, я могу сделать @some_inspection.results.to_json
.
Если вы передадите ему фактический JSON, он просто сохранит текст JSON в виде строки в столбце. Затем вы можете получить JSON обратно, просто вызвав имя столбца, например:
@some_inspection.results
#=> "{\"assigned_to\":\"John Smith\",\"inspection_date\":\"2020_01_02\",\"passed\":\"true\"}"
Но если вы хотите сделать что-то вроде .keys
, вам нужно проанализировать его, так как это строка:
JSON.parse(@some_inspection.results).keys
#=> ["assigned_to", "inspection_date", "passed"]