В моем приложении я использую ActiveResource для управления данными, которые получаю от удаленного API. Скажем, одна из моих моделей называется Account
, и у нее есть поле под названием settings
, которое задокументировано в API как «хэш свободной формы», что означает, что он может хранить все.Сделать модели ActiveResource генерировать хэши для вложенных объектов
Образец упрощена JSON я бы получить от API:
{
"account": {
"title": "My Account",
"settings": {
"a_random_setting": true,
"another_random_setting": 42,
"a_subconfig_of_sorts": {
"is_deep": true
}
}
}
}
ActiveResource очень любезно проходит весь путь вниз глубоких вложенных объектов в этом формате JSON и превращает их всех в Рубине объекты:
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
, но это похоже на скалярные типы.