我最近为我的用户添加了一个'首选项'字段,它在我的rails应用程序中使用了一些ActiveRecord序列化方法。这适用于现有用户,但是当我尝试在控制台中初始化新用户模型时,我收到错误:
u = User.new
#=>
ActiveRecord::SerializationTypeMismatch: preferences was supposed to be a Hash, but was a String
我在迁移中添加了这样的字段:
add_column :users, :preferences, :text, :default => { :allows_public_contributions => false }.to_yaml
在模型中,user.rb:
serialize :preferences, Hash
有什么想法吗?
答案 0 :(得分:2)
Rails自己处理序列化。从迁移中的默认选项中删除to_yaml
方法调用。如果在哈希上运行此方法,则会得到一个字符串。
{ :key => "value" }
# => "---\n:key: value\n"
这就是你得到例外的原因。