我最近将一个旧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.
真正奇怪的是,有一些模型具有正常的行为。
有人能帮我吗?
我最近将一个旧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.
真正奇怪的是,有一些模型具有正常的行为。
有人能帮我吗?
我现在知道什么时候会出现这个问题,但我仍然不知道为什么:
这有效:
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
有人有想法吗?
尝试使用 unserialized_value 而不是 unserialize,所以它是否已经被反序列化并不重要。作为参考,请在此处查看 unserialized_value 方法的源代码http://api.rubyonrails.org/classes/ActiveRecord/AttributeMethods/Serialization/Attribute.html