簡體   English   中英

Rails Postgres hstore。 數據庫未使用更改的值進行更新

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM