【问题标题】:How can I serialize - deserialize a hash in order to save it in the database?如何序列化 - 反序列化哈希以将其保存在数据库中?
【发布时间】:2012-07-28 14:55:16
【问题描述】:

我有一个哈希:

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

我猜这是由于时间字符串中的冒号造成的。 那么持久化哈希并再次检索它的最佳方法是什么?

感谢您的帮助。 最好的, 菲利普

【问题讨论】:

  • 如果你使用YAML.load,那么不要使用h.to_s,使用h.to_yaml

标签: ruby-on-rails ruby serialization hash


【解决方案1】:

在模型中创建一列文本类型。然后在你的模型文件中做

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

【讨论】:

  • 很好,工作正常。到目前为止我还不知道序列化过滤器。
猜你喜欢
  • 2011-10-05
  • 1970-01-01
  • 1970-01-01
  • 2014-09-04
  • 1970-01-01
  • 1970-01-01
  • 2019-06-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多