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"
         }
      ]
   }
}

Также я использую EmberJs с 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? Спасибо!


person Costa    schedule 12.08.2015    source источник


Ответы (2)


Другой вариант — пойти по маршруту JSON API.

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

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

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

person Frank Treacy    schedule 13.08.2015

Вам необходимо использовать примесь Embedded Records на стороне Ember.

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

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

person ChrisBarthol    schedule 12.08.2015
comment
Очень некрасиво перечислять все типы, встроенные в хеш attrs. Но это работа! Спасибо большое! - person Costa; 12.08.2015