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

尝试使用 unserialized_value 而不是 unserialize,所以它是否已经被反序列化并不重要。作为参考,请在此处查看 unserialized_value 方法的源代码http://api.rubyonrails.org/classes/ActiveRecord/AttributeMethods/Serialization/Attribute.html

于 2013-03-23T17:14:02.533 回答