2013-11-27 8 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 : "마크", last_name : "테스트", 데이터 : { "balance"=> "0"} created_at : "2013-11-27 14:39:09"updated_at "2013년 11월 27일 14시 39분 9초"

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

c.save 

(이 0.2ms)

(0.3ms)을 BEGIN은 내가 update_attributes을 할 경우 이

은, 그것이 사실 않습니다> = COMMIT 저장해.

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

c.save를 사용하면 오류나 예외가 표시되지 않습니다.. 누구든지 아이디어가 있습니까?

+0

샷,하지만 어떻게 공의 원래 균형에 거기에 도착 않았고,이 저장 불려지고? – davidfurber

+0

원래의 잔액 0은 Customer.create (: data => { "balance"=> "0"} 등)를 수행하는 것만으로 완료되었습니다. – james

답변

6

마지막으로 Ok는 내 질문에 대한 답변을 찾았습니다. Rails 4.0의 버그입니다.

"액티브 Hstore 버그 : 해시의 주요 업데이트 할 수 없습니다"난 아직도이 지금 작업하고 버그가 해결 될 때까지 기다릴 수없는 필요 https://github.com/rails/rails/issues/6127

23

를, 그래서 여기 내 해결 방법입니다 :

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

... 그리고 DB에 저장됩니다!

"attribute_name_will_change!" 방법은 잘 설명되지 않고 활성 모델 더러운 모듈에 소개에서 찾을 수 있습니다 http://api.rubyonrails.org/classes/ActiveModel/Dirty.html

+0

네,이 또한 저에게 효과적입니다. 감사. – james

+0

이것은 나를 위해 일했지만 _will_change를 사용해야했습니다! 메소드가 catch하기 위해 값을 변경하기 전에 메소드를 호출해야합니다. – John

+0

c. {hstore 열이 무엇이든간에} _will_change! – wbeange