2013-11-27 25 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

相關問題