【问题标题】:Saving a nested hash in Ruby on Rails在 Ruby on Rails 中保存嵌套哈希
【发布时间】:2012-02-28 23:34:24
【问题描述】:

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

我的模型如下所示:

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

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

【问题讨论】:

    标签: ruby-on-rails ruby postgresql


    【解决方案1】:

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

    我的方法是将可用性的单个实例从可用天数的哈希集合结构中分离出来。

    【讨论】:

    • 它来自 HTML 表单作为 HashWithIndifferentAccess。您是否建议将其从此转换为常规哈希?而是存储它?
    • 我尝试将其转换为常规哈希,但仍然遇到同样的问题。
    【解决方案2】:

    你的意思是 user.metadata.validated #

    元数据和可用性存储为哪些数据库列?它们需要是 TEXT

    【讨论】:

    • 只有 1 列,称为元数据。它是文本类型。可用性是我存储在元数据中的哈希的关键。
    猜你喜欢
    • 2013-05-06
    • 2022-12-11
    • 2014-04-09
    • 1970-01-01
    • 2011-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多