gpt4 book ai didi

ruby-on-rails - 使 ActiveResource 模型为嵌套对象生成哈希

转载 作者:数据小太阳 更新时间:2023-10-29 07:59:57 24 4
gpt4 key购买 nike

在我的应用程序中,我使用 ActiveResource 来管理从远程 API 接收的数据。比如,我的一个模型名为 Account,它有一个名为 settings 的字段,它在 API 中记录为“自由格式哈希”,这意味着它可以存储任何内容。

我将从 API 收到的示例简化 JSON:

{
"account": {
"title": "My Account",
"settings": {
"a_random_setting": true,
"another_random_setting": 42,
"a_subconfig_of_sorts": {
"is_deep": true
}
}
}
}

ActiveResource 非常友善地深入到 JSON 中最深的嵌套对象,并将它们全部转换为 Ruby 对象:

my_account.settings # => Account::Settings
my_account.settings.a_subconfig_of_sorts # => Account::Settings::ASubconfigOfSorts

这使得在 settings 的内容中查找动态键有点困难。本质上,我更愿意将 settings 作为常规哈希,而不是动态为我生成的自定义嵌套对象。

my_account.settings.class # => Hash
my_account.settings[:a_subconfig_of_sorts] # => {:is_deep => true}

如何让 ActiveResource 做到这一点?我的第一个猜测是使用 schema 声明,但它似乎只提供标量类型。

最佳答案

制定了解决该问题的解决方案。希望对您有所帮助。

class Account < ActiveResource::Base
create_reflection :settings_macro, :settings, class_name: 'Account::Hash'
class Hash < ::Hash
def initialize(hash, persisted)
merge!(hash)
end
end
end

关于ruby-on-rails - 使 ActiveResource 模型为嵌套对象生成哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22775843/

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