0

我最近爲我的用戶添加了一個'preferences'字段,它在我的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

你的用戶模型有回調嗎?像一個before_create什麼的? – MrYoshiji

回答

2

Rails自行處理序列化。從遷移中的默認選項中刪除to_yaml方法調用。如果你在散列上運行這個方法,你會得到一個字符串。

{ :key => "value" } 
# => "---\n:key: value\n" 

這就是你得到異常的原因。