[英]Rails Postgres hstore. DB not being updated with changed values
我試圖了解如何使用hstore,如果我嘗試修改哈希值中的數據,似乎數據庫沒有更新。
在我的rails控制台中我做到了
u = User.new
u.hash_column = {'key' => 'first'}
u.save
我在我的控制台中收到一條消息(0.4ms)BEGIN SQL(2.0ms)UPDATE“users”SET“hash_column”= $ 1,“updated_at”= $ 2 WHERE ...(18.0ms)COMMIT當我在DB中檢查時列具有正確的數據
現在,當我嘗試
u.hash_column['key'] = 'second'
該模型在控制台中似乎是正確的
puts u.hash_column
給{“key”=>“second”}
但是當我嘗試在我的控制台中保存這個u.save時,我得到(0.3ms)BEGIN(0.2ms)COMMIT,沒有更新語句,當我檢查數據庫時數據沒有改變。
如果我更改用戶模型上的另一個屬性並保存它hash_column仍然不會更新。 我可以在數據庫中更改hash_column的唯一方法就是分配給完整的哈希值
u.hash_column = {'key' => 'second'}
這是它的工作方式還是我做錯了什么?
這是由於rails當前跟蹤更改的方式。 它只會在您使用屬性設置器( u.hash_column
)時跟蹤更改。 如果更新散列中的值,則必須通過調用u.hash_column_will_change!
來通知Rails值已更改u.hash_column_will_change!
。 這會將值標記為臟,並且在下次調用save時,它將被保留。
這也會影響數組,字符串和日期。 如果你打電話給u.string_value.gsub!
或者u.array_column << value
如果不調用<column>_will_change!
這些更改將不會被<column>_will_change!
這些列的方法
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.