ruby-on-rails – Rails Postgres hstore. DB未更新更改的值

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – Rails Postgres hstore. DB未更新更改的值前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。



我正在努力了解如何使用hstore,如果我尝试修改我的哈希值,似乎数据库没有更新.

在我的导轨控制台我做

u = User.new
u.hash_column = {'key' => 'first'}
u.save

我在我的控制台收到一条消息
(0.4ms)开始
sql(2.0ms)UPDATE“users”SET“hash_column”= $1,“updated_at”= $2 WHERE …
(18.0ms)COMMIT
当我检查数据库时,列有正确的数据

现在当我尝试

u.hash_column['key'] = 'second'

该模型在控制台中似乎是正确的

puts u.hash_column


{ “键”=> “中第二个”}

但是当我尝试保存这个
u.save
在我的控制台我只是得到
(0.3ms)开始
(0.2ms)COMMIT
没有更新语句,当我检查数据库数据没有改变.

如果我更改用户模型上的另一个属性并保存它,则hash_column仍然不会被更新.我可以更改数据库中的hash_column的唯一方法就是分配给完整的哈希

u.hash_column = {'key' => 'second'}

这是怎么意味着工作或我做错了?

解决方法

这是由于rails目前跟踪更改的方式.当您使用属性设置器(u.hash_column)时,它将仅跟踪更改.如果您更新哈希值中的值,则必须通过调用u.hash_column_will_change!通知Rails更改该值.这将把值标记为脏,下一次保存被调用时,它将被保留.

这也会影响数组和字符串和日期.如果你打u.string_value.gsub!或u.array_column<<<值不会调用< column> _will_change!那些列的方法

猜你在找的Ruby相关文章