我有一个观察者,它将一个哈希序列化并将其作为我的User模型上的TEXT字段保存到mySQL数据库。我遇到的问题是我正在尝试向现有哈希添加新的键/值而不是覆盖它。它似乎只是覆盖它。 我的合并语法不正确吗?
这是我的观察者:
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 :(得分:0)
如果您需要仅在哈希中添加新的键值对,请执行以下操作:
usersToNotify.each do |u|
u.messages['event'] = event.id
u.save
end
答案 1 :(得分: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,否则您可以尝试使用符号代替字符串。您可能还希望确保通过将哈希值括在大括号中来传递哈希文字,以避免与解析器有任何歧义。
可能还有其他问题,所以如果上述建议不适合您,请务必使用实际的错误消息和示例更新您的问题。