2012-07-30 5 views
9

Ich habe einen Hash:Wie kann ich einen Hash serialisieren - deserialisieren, um ihn in der Datenbank zu speichern?

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" 
} 

Ich mag es in einer Datenbank mit dem folgenden Befehl speichern: h.to_s Dann würde ich gerne den Inhalt aus der Datenbank erhalten und mit ihm als Hash arbeiten.

s = MyModel[:field_which_contains_hash_string] 

Ich habe versucht, den Inhalt mit YAML::load s aber ich erhalte eine Fehlermeldung zu laden:

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

vermuten, dass in der Zeit-String zum Kolon fällig. Also, was ist der beste Weg, um den Hash persistent zu machen und es wieder abzurufen?

Hilfe ist willkommen. Am besten, Philip

+0

Wenn Sie 'YAML.load verwenden 'dann nicht' h.to_s', verwenden 'h.to_yaml' – aromero

Antwort

13

Erstellen Sie eine Spalte mit dem Typ Text in Ihrem Modell. Dann in Ihrer Modelldatei tun

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

Dann ist es mit Zugang:

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

Der Hash wird in die Spalte YAML mit serialisiert werden

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

+0

schön, das funktioniert gut. Ich kannte den Serialisierungsfilter bisher nicht. – dc10

Verwandte Themen