3-rd level serialization of embedded objects

150 views Asked by At

ember, ember-data 1.0, rails, rabl

I have next json returning from server:


    {
     "day":{
       "id":5,   
       "expenditures":[{
           "id":10,
           "expense_type":{
             "name":"Very Sad",
             "id":2
           }
         }, 
         {...}
       ]
     }
    }

I have next ember models:


    Expense.Day = DS.Model.extend 
      expenditures: DS.hasMany('expenditure')

    Expense.Expenditure = DS.Model.extend 
      day: DS.belongsTo('day')
      expenseType: DS.belongsTo('expenseType')

    Expense.ExpenseType = DS.Model.extend 
      name: DS.attr('string')
      expenditures: DS.hasMany('expenditure')

And I use ActiveModelSerializer for each model with EmbeddedRecordsMixin, for ex:


    Expense.DaySerializer = Expense.ApplicationSerializer.extend DS.EmbeddedRecordsMixin,
      attrs:
        expenditures: {embedded: 'always'}

    Expense.ExpenditureSerializer = Expense.ApplicationSerializer.extend DS.EmbeddedRecordsMixin,
      attrs:
        expenseType: {embedded: 'always'}
        day: {embedded: 'always'}

    Expense.ExpenseTypeSerializer = Expense.ApplicationSerializer.extend DS.EmbeddedRecordsMixin,
      attrs:
        expenditures: {embedded: 'always'}

It propertly loads day and expenditures, but not expense_type. I inject into each serializer merhod extract with console.log and super() for debugging and see, that only DaySerializer executed. What's wrong with me? I am very close to insanity with Ember =(

1

There are 1 answers

0
Arugin On BEST ANSWER

The problem is for my ember data understanding. I look into the EmbeddedRecordsMixin source code and see, that only hasMany ralation can be embedded.

Just adding expense_type_id node to expenditure item solves the problem:

{
 "day":{
   "id":5,   
   "expenditures":[{
       "id":10,
       "expense_type_id": 2
     }, 
     {...}
   ]
 }
}

Ember process GET request for /expense_types/2 and load model. Thats all!