又一个 Rails序列化问题。我已经阅读了很多这些并且找不到我的问题的答案,所以这里是:
我有典型的:
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
我真的想让它只使用数据库默认值。难道我做错了什么?