Emberjs, рельсы - Активный модельный адаптер

У меня есть рельсы API с драгоценным камнем "active_model_serializers".

http://localhost:3000/api/buildings/30.json генерирует для меня это:

{  
   building:{  
      id:30,
      city_name:"msc",
      infrastructure:[  
         {  
            id:40,
            name:"name 1",
            created_at:"2015-07-30T08:26:49.000Z",
            updated_at:"2015-07-30T08:26:49.000Z"
         },
         {  
            id:69,
            name:"name 2",
            created_at:"2015-07-30T08:26:50.000Z",
            updated_at:"2015-07-30T08:26:50.000Z"
         },
         {  
            id:39,
            name:"name 3",
            created_at:"2015-07-30T08:26:49.000Z",
            updated_at:"2015-07-30T08:26:49.000Z"
         }
      ]
   }
}

Также я использую EmberJ с ActiveModelAdapter. Но Эмбер ожидает этого:

{  
   building:{  
      id:30,
      city_name:"msc",
      infrastructure:[  
         40,
         69,
         39
      ]
   },
   infrastructure:[  
      {  
         id:40,
         name:"name 1",
         created_at:"2015-07-30T08:26:49.000Z",
         updated_at:"2015-07-30T08:26:49.000Z"
      },
      {  
         id:69,
         name:"name 2",
         created_at:"2015-07-30T08:26:50.000Z",
         updated_at:"2015-07-30T08:26:50.000Z"
      },
      {  
         id:39,
         name:"name 3",
         created_at:"2015-07-30T08:26:49.000Z",
         updated_at:"2015-07-30T08:26:49.000Z"
      }
   ]
}

Как я могу заставить ember работать со структурой rails json? Спасибо!

2 ответа

Решение

Другой вариант - пойти по пути JSON API.

Я думаю, что это лучший вариант, потому что

  • вы начинаете кодировать текущий / будущий формат Ember Data
  • яснее отобразить и понять, что происходит с данными

Я написал руководство по адресу http://emberigniter.com/modern-bridge-ember-and-rails-5-with-json-api/ (для Rails 5), но вы наверняка сможете адаптировать его к своей версии Rails

Вам нужно использовать Mixin Embedded Records со стороны Ember.

App.ColorSerializer = DS.ActiveModelSerializer.extend(DS.EmbeddedRecordsMixin, {
  attrs: {
    foos: {embedded: 'always'}
  }
});

Проверьте этот ответ

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