2013-11-27 28 views
18

我遇到了一个奇怪的问题,必须是我的用户错误,但无法弄清楚。如何使用Ruby on Rails 4.0.1/PostgreSQL Hstore更新数据记录的值?

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

我有一个模型,客户,一个叫数据列,它是一个hstore类型。出于某种原因,我无法使用任何新键/值更新数据(hstore)列,也无法更新现有键的值。我可以做一个插入,并指定任何关键/值没有任何问题。

客户id:1,first_name:“Mark”,last_name:“Test”,data:{“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!。有人有主意吗?

+0

瞎猜,但没有0原有的平衡如何在那里得到的,并且它获取调用上保存? – davidfurber

+0

0的原始余额是通过做Customer.create(:data => {“balance”=>“0”},等等)来完成的。) – james

回答

23

我还需要这现在的工作,不能等到要解决的bug,所以这里是我的解决方法:

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

...它会保存到数据库!

“attribute_name_will_change!”方法是不是有据可查的,可以在引入搜到活动模型肮脏的模块:http://api.rubyonrails.org/classes/ActiveModel/Dirty.html

+0

是的,这也适用于我。谢谢。 – james

+0

这对我有效,但我不得不使用_will_change!方法,然后再更改值以便捕捉 - 这是文档说你应该做的事情。 – John

+0

c。{无论您的hstore列被调用} _will_change! – wbeange

相关问题