В моем приложении на Rails есть модель, которая имеет некоторые has_one
ассоциации (это сфабрикованный пример):
class Person::Admin < ActiveRecord::Base
has_one :person_monthly_revenue
has_one :dude_monthly_niceness
accepts_nested_attributes_for :person_monthly_revenue, :dude_monthly_niceness
end
class Person::MonthlyRevenue < ActiveRecord::Base
belongs_to :person_admin
end
class Dude::MonthlyNiceness < ActiveRecord::Base
belongs_to :person_admin
end
Приложение обращается к бэкэнду, который вычисляет некоторые данные и возвращает фрагмент JSON, например:
{
"dude_monthly_niceness": {
"february": 1.1153232569518972,
"october": 1.1250217200558268,
"march": 1.3965786869658541,
"august": 1.6293418014601631,
"september": 1.4062771500697835,
"may": 1.7166279693955291,
"january": 1.0086401628086725,
"june": 1.5711510228365859,
"april": 1.5614525597326563,
"december": 0.99894169970474289,
"july": 1.7263264324994585,
"november": 0.95044938418509506
},
"person_monthly_revenue": {
"february": 10.585596551505297,
"october": 10.574823016656749,
"march": 9.9125274764852787,
"august": 9.2111604702328922,
"september": 9.7905249446675153,
"may": 9.1329712474607962,
"january": 10.479614016604238,
"june": 9.3710235926961936,
"april": 9.5897372624830304,
"december": 10.052587677671438,
"july": 8.9508877843925561,
"november": 10.925339756096172
},
}
Чтобы десериализовать его, я использую ActiveRecord from_json
, но вместо Person::Admin
объекта со всеми связями на месте я получаю эту ошибку:
>> Person::Admin.new.from_json(json)
NameError: uninitialized constant Person::Admin::DudeMonthlyNiceness
Я что-то не так делаю?
Есть ли лучший способ десериализации данных? (Я могу легко изменить бэкэнд)
ОБНОВЛЕНИЕ : оригинальное название было «Как десериализовать из json объекты ActiveRecord с ассоциациями?» но это оказалось моей ошибкой в определении ассоциаций, поэтому я сменил название.