2012-07-30 31 views
9

Tôi có một băm:Làm thế nào tôi có thể tuần tự hóa - deserialize một băm để lưu nó trong cơ sở dữ liệu?

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

Tôi muốn lưu nó trong một cơ sở dữ liệu với lệnh sau đây: h.to_s Sau đó, tôi muốn có được các nội dung từ cơ sở dữ liệu và làm việc với nó như băm.

s = MyModel[:field_which_contains_hash_string] 

tôi đã cố gắng để tải nội dung với YAML::load s nhưng tôi nhận được một lỗi:

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

Tôi đoán đó là do ruột kết trong chuỗi thời gian. Vì vậy, cách tốt nhất để duy trì băm và lấy lại nó là gì?

Trợ giúp được đánh giá cao. Tốt nhất, Philip

+0

Nếu bạn sử dụng 'YAML.load 'sau đó không làm' h.to_s', sử dụng 'h.to_yaml' – aromero

Trả lời

13

Tạo cột văn bản loại trong mô hình của bạn. Sau đó, trong tập mô hình của bạn làm

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

Sau đó truy cập nó bằng cách sử:

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

Các băm sẽ được tuần tự vào cột sử dụng YAML

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

+0

tốt đẹp, đó là làm việc tốt. tôi không biết bộ lọc tuần tự cho đến nay. – dc10

Các vấn đề liên quan