2012-07-30 5 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 

私はそれが時間文字列のコロンが原因だと思います。 ハッシュを永続化して再度取得する最も良い方法は何ですか?

お手数ですが、 ベスト、 フィリップ

+0

を使用して、列にシリアライズされます

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

'' h.to_s'をしないでください。 '' h.to_yaml'を使用してください。 – aromero

答えて

13

モデルにテキストの列を作成します。次に、あなたのモデルファイルに

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

を行い、その後使用してアクセス:あなたは `YAML.loadを使用する場合は、ハッシュはYAML

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

+0

うまくいきました。私はこれまでのシリアライズフィルターを知らなかった。 – dc10

関連する問題