2012-07-20 77 views
0

我有一個觀察者序列化散列並將其保存到mySQL數據庫中作爲我的用戶模型上的TEXT字段。我遇到的問題是我試圖添加一個新的鍵/值到現有的散列,而不是覆蓋它。它似乎只是覆蓋它。 我的合併語法不正確?rails合併散列語法

這裏是我的觀察:

class NotificationObserver < ActiveRecord::Observer 
    observe :event 

    def after_update(event) 
    usersToNotify=event.following 

    usersToNotify.each do |u|    
     u.messages.merge! 'event'=>event.id 
     u.save 
    end 
    end 
end 

任何幫助表示讚賞!

回答

0

它的工作原理我使用Ruby 1.9.3同時使用文字和隱哈希的。例如:

[1] pry(main)> foo = {foo: 'bar'} 
=> {:foo=>"bar"} 
[2] pry(main)> bar = {bar: 'baz'} 
=> {:bar=>"baz"} 
[3] pry(main)> foo.merge! bar 
=> {:foo=>"bar", :bar=>"baz"} 
[4] pry(main)> foo.merge! alice: 'bob' 
=> {:foo=>"bar", :bar=>"baz", :alice=>"bob"} 

您可以嘗試使用符號代替字符串你的鑰匙,除非你知道你有一個HashWithIndifferentAccess。您可能還想確保通過將散列括在花括號中來傳遞散列字符,以避免解析器出現歧義。

可能還有其他事情正在進行,因此如果上述建議不適用於您,請確保使用實際的錯誤消息和示例更新您的問題。

+0

感謝您將此推向正確的方向。我已經在控制檯中正確工作的語法。事實證明,我真正想要的是一個散列,每個鍵都有一組值。 – turbo2oh 2012-07-20 15:20:30

0

如果需要添加新鍵 - 值對您的哈希值,做這樣的事情:

usersToNotify.each do |u|    
    u.messages['event'] = event.id 
    u.save 
end