Обнаружение изменений в поле PostgreSQL json

Я использую поле JSON для хранения некоторых дополнительных параметров в одной из моих моделей.

Он отлично работает за исключением того, что он не обнаруживает изменений при доступе к данным через квадратные скобки:

2.1.1 :002 > p = Payments.last
 => {...}
2.1.1 :003 > p.params.keys
 => ["receipt_data"] 
2.1.1 :004 > p.params['verification_data'] = 'test'
 => "test" 
2.1.1 :005 > p.params.keys
 => ["receipt_data", "verification_data"] 
2.1.1 :006 > p.params_changed?
 => false 
2.1.1 :007 > p.save
   (0.2ms)  BEGIN
   (0.2ms)  COMMIT
 => true 
2.1.1 :008 > Payment.last.params.keys
  Payment Load (0.5ms)  SELECT  "payments".* FROM "payments"   ORDER BY "payments"."id" DESC LIMIT 1
 => ["receipt_data"] 

Как заставить его сохранить изменения?

1 ответов


принудительно, перед любым обновлением. вы можете сказать:

p = Payments.last
p.params_will_change!
p.params['verification_data'] = 'test'
p.save

Btw, ActiveRecord должен автоматически обрабатывать грязное отслеживание. Итак, если вы можете нажать приложение на github, которое воспроизводит эту проблему, я могу попытаться помочь.