2016-08-30 7 views
0

ich zu einem meiner Tabellen vor kurzem ein jsonb Feld hinzugefügtSchlüsselwert schieben Feld jsonb

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

und ich Werte wie dies am Speicherung:

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

jetzt würde ich eine andere Taste drücken, wie -Wertes Paar meiner jsonb Feld habe ich versucht, dies in der Konsole:

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

und ich bekomme so etwas wie

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

was normalerweise bedeutet, dass es gespeichert ist! aber wenn ich den Wert von preferences überprüfe sehe ich keinen zusätzlichen Wert, auch wenn ich die Konsole verlassen und Schienen Konsole wieder laufen lassen, kann ich jede Änderung sehen

Ist das der Weg, es zu tun oder ich bin falsch ?

Antwort

1

Wenn Sie merge verwenden zurückgeben Hash mit zusätzlichen Werte, sondern Werte hinzufügen, um Sie merge!

Ich denke, verwenden Hash müssen, dass richtige Weg

sein
user.preferences = user.preferences.merge(twitter_account: "something") 
+0

Ja, ich sehe, dass jsonb hier verwendete ähnlich wie bei normalem Hash kann ich auch 'user.preferences [" twitter_account "] =" something_else "' thanks! – medBo

Verwandte Themen