ruby-on-rails 确定属性是否已序列化Rails

oxcyiej7  于 2023-04-08  发布在  Ruby
关注(0)|答案(2)|浏览(179)

我有一个rails 3.2应用程序,它有一个类:

class Element
  serialize :body
end

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

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

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

dffbzjpn

dffbzjpn1#

看起来像是从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
a0zr77ik

a0zr77ik2#

在Rails 5.0及更高版本中,要获得与早期Rails中的#serialized_attributes相同的结果,您可以执行以下操作:

Element.attribute_types.select { |_k, v| v.respond_to?(:coder) }
=> {"value"=>#<ActiveRecord::Coders::YAMLColumn:0x007ffcb30a9f08 @object_class=Object>,
    "body"=>#<ActiveRecord::Coders::YAMLColumn:0x007ffcb3096818 @object_class=Object>}

相关问题