0

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

任何帮助表示赞赏!

4

2 回答 2

0

如果您需要在哈希中添加一个新的键值对,请执行以下操作:

usersToNotify.each do |u|               
  u.messages['event'] = event.id
  u.save 
end
于 2012-07-20T13:57:01.903 回答
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。您可能还希望通过将散列括在大括号中来确保传递散列文字,以避免与解析器产生任何歧义。

可能还有其他事情发生,因此如果上述建议对您不起作用,请确保使用实际错误消息和示例更新您的问题。

于 2012-07-20T14:00:48.963 回答