Сериализация 3-го уровня встроенных объектов
Ember, Ember-Data 1.0, Рельсы, Рабл
У меня есть следующий JSON, возвращающийся с сервера:
{"день":{ "идентификатор":5, "расходы":[{ "идентификатор":10, "тип расхода":{ "имя": "очень печально", "идентификатор":2 } }, {...} ] } }
У меня есть следующие модели Ember:
Expense.Day = DS.Model.extend расходы: DS.hasMany("расходы") Expense.Expenditure = DS.Model.extend день: DS.belongsTo('день') costType: DS.belongsTo('costType') Expense.ExpenseType = DS.Model.extend имя: DS.attr('строка') расходы: DS.hasMany("расходы")
И я использую ActiveModelSerializer для каждой модели с EmbeddedRecordsMixin, например:
Expense.DaySerializer = Expense.ApplicationSerializer.extend DS.EmbeddedRecordsMixin, ATTRS: расходы: {вложенный: 'всегда'} Expense.ExpenditureSerializer = Expense.ApplicationSerializer.extend DS.EmbeddedRecordsMixin, ATTRS: costType: {внедренный: 'всегда'} день: {внедрено: 'всегда'} Expense.ExpenseTypeSerializer = Expense.ApplicationSerializer.extend DS.EmbeddedRecordsMixin, ATTRS: расходы: {вложенный: 'всегда'}
Он правильно загружает день и расходы, но не расход_типа. Я вставляю в каждый сериализатор извлечение merhod с console.log и super() для отладки и вижу, что только DaySerializer выполняется. Что со мной не так? Я очень близок к безумию с Эмбер =(
1 ответ
Решение
Проблема в моем понимании данных. Я смотрю в исходный код EmbeddedRecordsMixin и вижу, что только hasMany ralation может быть встроен.
Простое добавление узла расхода_типа в статью расходов решает проблему:
{
"day":{
"id":5,
"expenditures":[{
"id":10,
"expense_type_id": 2
},
{...}
]
}
}
Ember обрабатывает запрос GET для / cost_types/2 и загружает модель. Это все!