2016-08-04 57 views
0

Ich habe ich eine Rails 3.2-Anwendung, die eine Klasse hat mit:bestimmen, ob Attribut Schienen serialisiert

class Element 
    serialize :body 
end 

Im Code wie inspizieren ich das Attribut, um zu bestimmen, ob das Feld nur Text ist oder serialisiert? Dann serialisiert, wenn ich muss wissen, ob es

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

HINWEIS: Ich muss mit der richtigen Art von Element.new auf ein Objekt gehen. Ich greife nicht nur dieses Objekt aus der DB. Doing Element.new wird das Feld nil

Antwort

0

sein Sieht aus wie Sie mit serialized_attributes

dann gestartet werden, wenn das Feld eine serialisierte Feld hat es in einem Hash sein wird und damit zu object_class reagieren. 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