поместите значение ключа в поле jsonb

Недавно я добавил поле jsonb в одну из своих таблиц.

add_column :users, :preferences, :jsonb, null: false, default: '{}'

и я сохраняю такие значения:

user = User.first
user.preferences = { job: "programmer" }

теперь я хотел бы добавить еще одну пару ключ-значение в свое поле jsonb, я попробовал это в консоли:

user = User.first
user.preferences.merge(twitter_account: "something")
user.save

и я получаю что-то вроде

....
(0.3ms)  COMMIT
=> true 

что обычно означает, что он сохранен! но когда я проверяю значение preferences, я не вижу никакой дополнительной ценности, даже когда я выхожу из консоли и снова запускаю консоль rails, я вижу любые изменения

Это способ сделать это или я ошибаюсь?


person medBouzid    schedule 30.08.2016    source источник


Ответы (1)


Когда вы используете merge, он возвращает хэш с добавленными значениями, но для добавления значений в хэш вам нужно использовать объединить!

Я думаю, что правильный путь будет

user.preferences = user.preferences.merge(twitter_account: "something")
person Michael Malov    schedule 30.08.2016
comment
Да, я вижу, что здесь используется jsonb, похожий на обычный хэш, я также могу сделать user.preferences["twitter_account"] = "something_else" спасибо! - person medBouzid; 30.08.2016