2012-07-30 42 views
9

我有一個哈希:如何序列化 - 反序列化散列以便將其保存在數據庫中?

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

我想它用下面的命令保存在一個數據庫:h.to_s 後來我想從數據庫獲取內容,並用它作爲哈希工作。

s = MyModel[:field_which_contains_hash_string] 

我試圖加載與YAML::load s的內容,但我得到一個錯誤:

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

我想這是由於時間字符串結腸。 那麼堅持散列並再次檢索它的最好方法是什麼?

幫助表示讚賞。 Best, Philip

+0

如果你使用'YAML.load序列化入列'那麼不要'h.to_s',使用'h.to_yaml' – aromero 2012-07-30 21:47:44

回答

13

在您的模型中創建一個文本類型的列。然後在你的模型文件做

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

然後使用訪問:

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

散列將使用YAML

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

+0

很好,這工作正常。到目前爲止我還不知道序列化過濾器。 – dc10 2012-07-31 08:40:13