3

最近、古いRails 2.3アプリ (Ruby 1.8.7) を にアップグレードしましたRails 3.2 / Ruby 1.9.3。ActiveRecord シリアライズを使用して、シリアライズされた属性にアクセスしようとすると、次のようになります。

 ActiveRecord::AttributeMethods::Serialization::Attribute returned.
 .unserialize then returns the actual value.

本当に奇妙なことは、正常な動作をするモデルがいくつかあるということです。

誰かが私を助けることができますか?

4

2 に答える 2

5

この問題がいつ発生するかはわかりましたが、理由はまだわかりません。

これは機能します:

User < ActiveRecord::Base
    serialize :options, Hash
end

オプションは {} を返します

シリアル化する前にモデル自体を呼び出すと、次のようになります。

User < ActiveRecord::Base
  USER_LIST = User.all.map {|u| [u.name, u.id]}

  serialize :options, Hash
end

ActiveRecord::AttributeMethods::Serialization::Attribute を取得します

誰かがアイデアを得ましたか?

于 2013-03-25T08:43:40.933 に答える
1

unserialize ではなく unserialized_value を使用してみてください。これにより、既に unserialized されているかどうかは問題になりません。参考までに、ここで unserialized_value メソッドのソースを参照してください http://api.rubyonrails.org/classes/ActiveRecord/AttributeMethods/Serialization/Attribute.html

于 2013-03-23T17:14:02.533 に答える