加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 20:30:28 所属栏目:百科 来源:网络整理
导读:我正在努力了解如何使用hstore,如果我尝试修改我的哈希值,似乎数据库没有更新. 在我的导轨控制台我做 u = User.newu.hash_column = {'key' = 'first'}u.save 我在我的控制台收到一条消息 (0.4ms)开始 SQL(2.0ms)UPDATE“users”SET“hash_column”= $1,“upd



我正在努力了解如何使用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!那些列的方法

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读