【问题标题】:Rails 3 - unserialize returns only ActiveRecord::AttributeMethods::Serialization::AttributeRails 3 - 反序列化仅返回 ActiveRecord::AttributeMethods::Serialization::Attribute
【发布时间】:2013-03-23 15:40:08
【问题描述】:

我最近将旧的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.

真正奇怪的是,有一些模型具有正常行为。

有人可以帮我吗?

【问题讨论】:

    标签: ruby activerecord serialization ruby-on-rails-3.2


    【解决方案1】:

    我现在知道什么时候会出现这个问题,但我仍然不知道为什么:

    这行得通:

    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

    有人有想法吗?

    【讨论】:

    • 确认可能需要在模型定义顶部调用serialize
    • 我也被这个烫伤了。澄清一下,serialize 似乎不必是类声明下的第一行,但它必须在模型中的其他内容调用 ActiveRecord 调用之前被调用。
    【解决方案2】:

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

    【讨论】:

    • 这个问题的解决方法很简单,就是不明白为什么会这样......
    猜你喜欢
    • 1970-01-01
    • 2012-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-09
    • 2011-09-21
    • 1970-01-01
    相关资源
    最近更新 更多