如何使用Ruby on Rails 4.0.1 / PostgreSQL Hstore更新数据记录的值?

时间:2013-11-27 19:23:36

标签: ruby-on-rails rails-postgresql hstore

我遇到了一个奇怪的问题,我必须是用户错误,但无法弄明白。

我正在使用Ruby 1.9.3-p194,Rails 4.01,PostgreSQL。

我有一个模型Customer,其中包含一个名为数据的列,它是 hstore 类型。出于某种原因,我无法使用任何新的键/值更新数据(hstore)列,也无法更新现有键的值。我可以插入并指定任何问题的任何键/值。

客户ID:1,first_name:“标记”,last_name:“测试”,数据:{“balance”=>“0”},created_at:“2013-11-27 14:39:09”,updated_at :“2013-11-27 14:39:09”

c.data["balance"] = "100"

c.save

(0.2ms)BEGIN

(0.3ms)COMMIT  =>真的

如果我执行update_attributes,它会保存它。

c.update_attributes({:data => {"balance" => "343"}})

当我使用 c.save!时,我没有看到任何错误或异常。有人有什么想法吗?

3 个答案:

答案 0 :(得分:23)

我现在仍然需要这个工作,不能等待错误解决,所以这是我的解决方法:

c.data["balance"] = "100"
c.data_will_change!
c.save

...它将保存到DB!

“attribute_name_will_change!”方法没有详细记录,可以在Active Model Dirty模块的介绍中找到:http://api.rubyonrails.org/classes/ActiveModel/Dirty.html

答案 1 :(得分:6)

好的,终于找到了我的问题的答案。事实证明它是Rails 4.0中的一个错误。

" ActiveRecord Hstore bug:无法更新哈希中的密钥" https://github.com/rails/rails/issues/6127

答案 2 :(得分:5)

升级后的Hstore文档:

http://edgeguides.rubyonrails.org/active_record_postgresql.html#hstore

他们正在努力为Hstore和Json对象更新使用相同的解决方案。

这将在Rails 4.2上修复。

拉取请求:https://github.com/rails/rails/pull/15674