在Ruby on Rails中保存嵌套哈希

时间:2012-02-28 23:34:25

标签: ruby-on-rails ruby postgresql

我正在尝试将嵌套的Hash保存到我的数据库并检索它,但是在检索时嵌套值会丢失。

我的模型看起来像这样:

class User
  serialize :metadata, MetaData
end

MetaData类看起来像这样:

class MetaData < Hash
  attr_accessor :availability, :validated
end

我用来存储数据的代码看起来像这样(但实际数据来自HTML表单):

user = User.find(id)
user.metadata.validated = true
user.metadata.availability = {'Sunday' => 'Yes', 'Monday' => 'No', 'Tuesday' => 'Yes'}
user.save

当我查看数据库中的数据时,我看到以下内容:

--- !map:MetaData 
availability: !map:ActiveSupport::HashWithIndifferentAccess 
  Sunday: "Yes"
  Monday: "No"
  Tuesday: "Yes"
validated: true

当我尝试再次获取对象时出现问题:

user = User.find(id)
user.metadata.validated # <- this is true
user.metadata.availability # <- this is nil

有什么想法吗?我正在使用Rails 3.1和Postgresql作为我的数据存储区。

2 个答案:

答案 0 :(得分:1)

如果查看数据库,您会看到“map:ActiveSupport::HashWithIndifferentAccess”是否可用?

我的方法是将可用性的单个实例与可用天数的哈希集合结构分开。

答案 1 :(得分:0)

你的意思是user.metadata.validated#&lt; - 这是真的吗?

哪些数据库列的元数据和可用性存储为?他们需要成为TEXT