1

モデルページの多くの属性をハッシュとしてシリアル化しています。

属性の数が多いため、メタプログラミングアプローチを採用し、.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または別のメソッドを使用するなど?自分で書く?これにシリアル化を使用するべきではないというアドバイスがあったとしても、どんな助けでもありがたいです。

4

1 に答える 1

0

私がやる:

self.ins.name.send(:[]=, key, value)
于 2012-08-13T18:15:06.327 に答える