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

18

我遇到了一个奇怪的问题,这可能是我的错误,但我无法弄清楚。

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

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

客户ID: 1,名字: "Mark",姓氏: "Test",数据: {"balance"=>"0"},创建时间: "2013-11-27 14:39:09",更新时间: "2013-11-27 14:39:09"

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

c.save

(0.2毫秒) 开始

(0.3毫秒) 提交 => true

如果我执行update_attributes操作,它会保存更改。

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

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


瞎猜一下,但是最初的0余额是怎么进去的?并且在保存时是否被调用了? - davidfurber
原始的0余额是通过执行Customer.create(:data => {"balance" => "0"},等操作完成的... - james
3个回答

23

我仍然需要它现在就能工作,而不能等待缺陷被解决,所以这是我的解决方法:

我仍需要它现在就能运行,无法等待漏洞修复,因此这是我的解决方案:

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

... 然后它将保存到数据库中!

"attribute_name_will_change!" 方法并没有得到很好的记录,可以在Active Model Dirty模块的介绍中找到:http://api.rubyonrails.org/classes/ActiveModel/Dirty.html


这对我有用,但在更改值之前,我必须使用_will_change!方法才能捕获它 - 这就是文档所说的。 - John
c.{无论您的hstore列如何命名}_will_change! - user12121234

6

5

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接