我有一個人模型&一個項目模型。一個人有很多物品,一個物品屬於一個人。爲什麼我得到這個'不能修改冷凍散列'錯誤?
在這段代碼中,我需要刪除一個人的現有項目,並從一個參數(這是一個散列數組)創建新的項目。然後,我需要根據其中一個字段更新其中一個項目的字段。
@person = Person.find(params["id"])
@person.person_items.each do |q|
q.destroy
end
person_items_from_param = ActiveSupport::JSON.decode(params["person_items"])
person_items_from_param.each do |pi|
@person.person_items.create(pi) if pi.is_a?(Hash)
end
@person.person_items.each do |x|
if x.item_type == "Type1"
x.item_amount = "5"
elsif x.item_type == "Type2"
x.item_amount = "10"
end
x.save
end
在x.item_amount = "5"
& x.item_amount = "10"
線我得到這個錯誤:
RuntimeError in PersonsController#submit_items
can't modify frozen hash
我該如何解決這個問題?謝謝閱讀。
謝謝您的回答。我不確定我是否理解,但我不想修改散列/ JSON對象,我試圖修改剛剛創建的ActiveRecord對象。這在我的代碼中可能有點令人困惑,我已經改變了一些變量名來嘗試使它更清晰。 – ben 2010-12-19 06:05:45
我相信ActiveSupport :: JSON.decode(params [「person_items」])創建凍結哈希。但是當你重新加載它時,ActiveRecord會實例化一個新的未被凍結的哈希 – EnabrenTane 2011-01-07 02:19:30
當刪除子時試圖刪除父項時重新加載工作 – Anwar 2016-04-10 18:29:26