在我的应用程序中,我使用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/