0

私は最近、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

何か案は?

4

1 に答える 1

2

Rails 自体がシリアル化を処理します。to_yaml移行のデフォルト オプションからメソッド呼び出しを削除します。このメソッドをハッシュで実行すると、文字列が得られます。

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

それが例外を受け取る理由です。

于 2012-10-03T15:30:40.770 に答える