Сериализация 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 и загружает модель. Это все!

Другие вопросы по тегам