【问题标题】:Rails Postgres hstore. DB not being updated with changed valuesRails Postgres hstore。数据库未使用更改的值进行更新
【发布时间】:2014-02-05 12:16:29
【问题描述】:

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

在我的 Rails 控制台中,我这样做了

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) 提交 当我签入数据库时​​,该列的数据正确

当我尝试时

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

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

puts u.hash_column

给予 {"key"=>"秒"}

但是当我尝试保存它时 u.save 在我的控制台中,我得到了 (0.3ms) 开始 (0.2ms) 提交 没有更新语句,当我检查数据库时,数据没有改变。

如果我更改用户模型上的另一个属性并保存它 hash_column 仍然没有得到更新。我可以更改数据库中 hash_column 的唯一方法似乎是分配给完整的哈希,例如

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

这是它的工作原理还是我做错了什么?

【问题讨论】:

    标签: ruby-on-rails postgresql


    【解决方案1】:

    这是由于 Rails 当前跟踪的方式发生了变化。它只会在您使用属性设置器 (u.hash_column) 时跟踪更改。如果更新散列中的值,则必须通过调用u.hash_column_will_change! 通知 Rails 该值已更改。这会将值标记为脏值,并且下次调用 save 时,它​​将被持久化。

    这也会影响数组、字符串和日期。如果您调用 u.string_value.gsub!u.array_column << value,这些更改将不会在不为这些列调用 <column>_will_change! 方法的情况下保留

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-31
      • 1970-01-01
      • 1970-01-01
      • 2013-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多