确定属性是否已经序列化rails

时间:2016-08-04 04:52:52

标签: ruby-on-rails ruby-on-rails-3 activerecord

我有一个rails 3.2 app,它有一个类:

class Element
  serialize :body
end

在代码中如何检查属性以确定字段是文本还是序列化?然后如果序列化我需要知道它是否有

  serialize :body
  # vs
  serialize :body, Hash
  # vs
  serialize :body, Array

注意:我需要从Element.new转到具有正确类型的对象。我不只是从数据库中抓取这个对象。执行Element.new字段将为nil

1 个答案:

答案 0 :(得分:1)

您似乎从serialized_attributes

开始

然后,如果该字段具有序列化字段,则它将处于哈希值,因此会响应object_class。 COOL

(dev)> Element.serialized_attributes
  => {"value"=>#<ActiveRecord::Coders::YAMLColumn:0x007ffcb30a9f08 @object_class=Object>, "body"=>#<ActiveRecord::Coders::YAMLColumn:0x007ffcb3096818 @object_class=Object>}

(dev)> Element.serialized_attributes['value']
  => #<ActiveRecord::Coders::YAMLColumn:0x007ffcb3213010 @object_class=Array>
(dev)> Element.serialized_attributes['value'].try(:object_class)
  => Array