さらに別のレールシリアライゼーションの質問。私はこれらの多くを読みましたが、私の問題に対する答えを見つけることができなかったので、ここにあります:
私は典型的なものを持っています:
class User < ActiveRecord::Base
serialize :prefs, Hash
私の移行では(この質問と回答のおかげで):
add_column :user, :prefs, :text, default: { foo: 'bar' }.to_yaml
ここで、既存のユーザーをロードすると、:prefs が逆シリアル化されます。
User.first.prefs[:foo] # returns 'bar'
User.first.prefs.class # returns Hash
User.first.prefs # returns {:foo => "bar"}
だからそれは完璧に機能します!しかし、私が新しいものを作成するとき:
User.new.prefs[:foor] # TypeError: can't convert Symbol into Integer
User.new.prefs.class # returns String
User.new.prefs # returns "---\n:foo: bar\n"
これらなしでこれを機能させることは可能ですか?
after_initialize :method
- default_value_forのような宝石
- オーバーライド
initialize
データベースのデフォルトのみで動作させたいと本当に思っています。私は何か間違ったことをしていますか?