2012-07-30 15 views
9

que tienen un hash:¿Cómo puedo serializar - deserializar un hash para guardarlo en la base de datos?

h = { 
    "revision"=>7,   
    "rev"=>"708a4bd5b", 
    "thumb_exists"=>false, 
    "bytes"=>246000,  
    "modified"=>"Sun, 01 Jul 2012 17:09:15 +0000", 
    "client_mtime"=>"Sun, 01 Jul 2012 17:09:15  +0000", 
    "path"=>"/Getting Started.pdf", 
    "is_dir"=>false,  
    "icon"=>"page_white_acrobat", 
    "root"=>"dropbox",  
    "mime_type"=>"application/pdf", 
    "size"=>"240.2 KB" 
} 

me gustaría guardarlo en una base de datos con el siguiente comando: h.to_s Entonces me gustaría obtener el contenido de la base de datos y trabajar con él como hash.

s = MyModel[:field_which_contains_hash_string] 

Me trataron de cargar el contenido con YAML::load s pero me da un error:

Psych::SyntaxError: (<unknown>): found unexpected ':' while scanning a plain scalar at line 1 column 96 

supongo que es debido a los dos puntos en la cadena de tiempo. Entonces, ¿cuál es la mejor manera de mantener el hash y recuperarlo nuevamente?

Se agradece la ayuda. Mejor, Philip

+0

Si utiliza 'YAML.load 'entonces no hagas' h.to_s', usa 'h.to_yaml' – aromero

Respuesta

13

Cree una columna de tipo texto en su modelo. A continuación, en el archivo de modelo de hacer

class MyModel < ActiveRecord::Base 
    serialize :column_name, Hash 
end 

luego acceder a ella usando:

my_model = MyModel.new 
my_model.column_name[:key] = value 
my_model.column_name[:key] 

El hash se serializa en la columna usando YAML

http://api.rubyonrails.org/classes/ActiveRecord/AttributeMethods/Serialization/ClassMethods.html#method-i-serialize

+0

bueno, está funcionando bien. Hasta ahora no sabía el filtro de serialización. – dc10

Cuestiones relacionadas