2012-07-30 10 views
9

mam hash:Jak można serializować - deserializować skrót, aby zapisać go w bazie danych?

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

Chciałbym zapisać go w bazie danych za pomocą następującego polecenia: h.to_s Następnie chciałbym uzyskać zawartość z bazy danych i pracować z nim jak hash.

s = MyModel[:field_which_contains_hash_string] 

Próbowałem załadować zawartość z YAML::load s ale pojawia się błąd:

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

myślę, że to ze względu na okrężnicy w ciągu czasu. Jaki jest najlepszy sposób na utrzymanie wartości skrótu i ​​odzyskanie go ponownie?

Pomoc jest doceniana. Best, Philip

+0

Jeśli używasz 'YAML.load 'następnie nie rób' h.to_s', używaj 'h.to_yaml' – aromero

Odpowiedz

13

Utwórz kolumnę tekstu tekstowego w swoim modelu. Następnie w pliku modelu zrobić

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

następnie uzyskać do niego dostęp za pomocą:

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

Haszysz będą szeregowane do kolumny za pomocą YAML

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

+0

ładnie, to działa poprawnie. nie znałem do tej pory filtra serializującego. – dc10

Powiązane problemy