【问题标题】:rails using .send( ) with a serialized column to add element to hashrails 使用带有序列化列的 .send() 将元素添加到散列
【发布时间】:2012-08-09 23:41:24
【问题描述】:

我将模型页面上的许多属性序列化为哈希。

由于属性数量众多,我采用了元编程方法,并希望使用 .send() 来遍历属性集合(这样我就不必为每个属性。

我做过这样的事情:

insights.each do |ins|
  self.send("#{ins.name}=",  {(Time.now) => ins.values[1]['value'].to_f})
  self.save
end 

问题是这显然会覆盖整个序列化列,而我希望将其作为一个元素添加到序列化哈希中。

试过这样的:

insights.each do |ins|
  self.send("#{ins.name}[#{Time.now}]=", ins.values[1]['value'].to_f)
  self.save
end 

但是得到一个NoMethodError: undefined method page_fan_adds_unique[Mon Aug 13 13:31:58 -0400 2012]=

在控制台中,我可以执行 Page.find(5).page_fan_adds_unique[Time.now]= 12345 并按预期将其作为附加元素保存到哈希中。

那么如何使用 .send() 将附加元素保存到序列化哈希中?还是有其他方法?比如使用 update_attribute 还是其他方法?自己写?任何帮助表示赞赏,即使建议是我不应该为此使用序列化。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 serialization metaprogramming


    【解决方案1】:

    我愿意:

    self.ins.name.send(:[]=, key, value)
    

    【讨论】:

    • self.send(ins.name).send(:[]=, Time.now, ins.values[1]['value'].to_f) 在这种情况下更有可能工作。
    • @CalebThompson:是的,可能是,不确定这里的字符串在哪里 :)
    • 直奔@CalebThompson 的解决方案,它成功了。谢谢,从来没有想过调用 send 两次。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-17
    • 2020-04-14
    • 2019-08-13
    • 2010-12-23
    • 2018-08-31
    相关资源
    最近更新 更多