次のように、シリアル化された Hash 属性を持つ Rails モデル クラスがあります。
class Action
serialize :metadata, Hash
# . . .
end
その列はtext
、YAML エンコーディングの列に格納されます。metadata
問題は、メソッドに値を渡すcreate!
と、ハッシュ キーがシンボルから文字列に変換されますが、それ以外の場合は変換されないことです。例えば:
$ rails console
> a = Action.create!(:metadata => {:foo => "bar"})
> a.metadata
=> {"foo"=>"bar"}
> a.metadata[:fizz] = "buzz"
> a.metadata
=> {"foo"=>"bar", :fizz=>"buzz"}
モデルを保存すると、データベースには次のテキスト値が含まれます。
---
foo: bar
:fizz: buzz
これを修正する方法はありますか?
(これは Rails 3.0.16 の場合です。)