gpt4 book ai didi

ruby - 在 Mongoid 文档中保存和获取哈希

转载 作者:太空宇宙 更新时间:2023-11-03 16:33:18 24 4
gpt4 key购买 nike

我正在使用以下内容创建指标哈希:

@metrics = Hash.new

...

@metrics[:users][:year][:male] = ...
@metrics[:users][:today][:male] = ...

...

Metrics.new(:metrics => @metrics).save

我有以下类(class):

class Metrics
include Mongoid::Document
include Mongoid::Timestamps

field :metrics, :type => Hash

attr_accessible :metrics

...

end

要获取此文档,我有:

@metrics = Metrics.find(params[:id])
@metrics = @metrics[:metrics]

为了访问这些元素,我需要做:

@metrics['users']['year']['male']

有没有一种方法可以让我在访问散列值的方式上保持一致,但仍将数据存储在 mongo 中?

最佳答案

您使用的是哪个版本的 Ruby 和 Mongoid?通过符号访问 Mongoid 对象中的哈希在 Mongoid 3.0.4 和 Ruby 1.9.3 中工作正常。所以我可以做类似的事情:

@metrics = Metrics.find(params[:id])[:metrics]
@metrics[:users][:year][:male]

甚至:

Metrics.find(params[:id])[:metrics][:users][:year][:male]

此外,为什么不直接将 metrics 字段排除在外,然后将 Metrics 类的实例视为 Hash 的实例?使用 Mongoid,您可以使用标准的 Ruby 哈希符号语法动态设置和获取属性,而无需“声明”字段。删除了 metrics 字段:

m = Metric.new
m[:users] = {}
m[:users][:year] = {}
m[:users][:year][:male] = "data"

此外,如果您需要自动初始化嵌套哈希的方法,那么您可以执行以下操作:

m = Metric.new
m[:users][:year][:male] = "data"

您可以将所有这些逻辑放入 Metrics 类中。要开始使用,您可以尝试从 AutoHash 类中调整类似 [][]= 方法的解释 here .这将为您提供我认为最干净的界面。

关于ruby - 在 Mongoid 文档中保存和获取哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12064583/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com