rails合并哈希语法

时间:2012-07-20 13:51:10

标签: mysql ruby-on-rails ruby-on-rails-3

我有一个观察者,它将一个哈希序列化并将其作为我的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

感谢任何帮助!

2 个答案:

答案 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,否则您可以尝试使用符号代替字符串。您可能还希望确保通过将哈希值括在大括号中来传递哈希文字,以避免与解析器有任何歧义。

可能还有其他问题,所以如果上述建议不适合您,请务必使用实际的错误消息和示例更新您的问题。