使用带有序列化列的.send()来将元素添加到哈希

时间:2012-08-13 17:43:22

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

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

由于属性数量很多,我采用了元编程方法,并希望使用.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还是其他方法?写我自己的?任何帮助都表示赞赏,即使建议我不应该使用序列化。

1 个答案:

答案 0 :(得分:0)

我会这样做:

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