Использование Active Record для обновления значения jsonb - PullRequest
0 голосов
/ 08 июля 2020

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

На высоком уровне мне нужно, чтобы мое значение jsonb было.

{ question: ’q5’, normal: 0, hybrid: 2500 }

Я сделал быструю миграцию установка моего нового значения condition_price на значение jsonb. У меня также установлены значения по умолчанию {}, так как у меня есть только один, который мне нужно обновить.

def change
  add_column :condition_columns, :condition_price, :jsonb, default: {}
end

После того, как он был создан, я вышел, чтобы отредактировать свои c condition_price . То, что я официально пробовал, было:

ConditionColumns.where(id: 12).first.update!{"condition_price = (question: ’q5’, normal: 0, hybrid: 2500).to_json"}

Я чувствую, что это самое близкое к этому, но я не совсем уверен, где я здесь.

Есть ли у кого-нибудь идеи, возможно ли это или как это сделать?

1 Ответ

0 голосов
/ 10 июля 2020

Думаю, что лучшим решением будет использовать save вместо обновления. LIke:

condition_column = ConditionColumns.find(12)
condition_column.condition_price['question'] = 'q5'
condition_column.save

или

condition_column.condition_price.merge!('question' => 'q5')
condition_column.save

или если вам нужно использовать обновление

condition_column.update!(condition_price: { question: ’q5’, normal: 0, hybrid: 2500 })
...