2017-09-04 3 views
0

J'écris une application de braise pour montrer le menu d'un restaurant. Les données étant organisées comme un restaurant ayant de nombreuses sections de menu qui eux-mêmes ont de nombreux éléments.Les relations imbriquées utilisant include

Dans mon itinéraire, j'utilise findRecord pour charger l'enregistrement de restaurant de niveau supérieur avec include défini pour inclure les sections et les éléments. Le serveur produit le JSONAPI suivant:

{ 
    "links": { 
     "up": "http://localhost/api/restaurants", 
     "self": "http://localhost/api/restaurants/0b27fd96-90e8-11e7-81c2-08002787e7fb" 
    }, 
    "data": { 
     "type": "restaurant", 
     "id": "0b27fd96-90e8-11e7-81c2-08002787e7fb", 
     "attributes": { 
      "title": "Made-Up Foodery", 
      "contact-number": "+1-555-1234", 
      "restaurant-address": "Made-up, address F4K 3ED", 
      "minimum-order": 500, 
      "delivery-cost": 250 
     }, 
     "relationships": { 
      "menu-sections": { 
       "links": { 
        "related": "http://localhost/restaurants/0b27fd96-90e8-11e7-81c2-08002787e7fb/menu-sections" 
       }, 
       "data": [ 
        { 
         "type": "menu-section", 
         "id": "23760716-1b75-4880-bae4-a6daaef3fc98" 
        } 
       ] 
      } 
     } 
    }, 
    "included": [ 
     { 
      "type": "menu-section", 
      "id": "23760716-1b75-4880-bae4-a6daaef3fc98", 
      "attributes": { 
       "title": "Test Section", 
       "description": "This is a test section." 
      }, 
      "relationships": { 
       "menu-items": { 
        "links": { 
         "related": "http://localhost/menu-sections/23760716-1b75-4880-bae4-a6daaef3fc98/menu-items" 
        }, 
        "data": [ 
         { 
          "type": "menu-item", 
          "id": "a62e2ae0-326b-4838-b5ba-ffa102fcafb1" 
         } 
        ] 
       } 
      }, 
      "links": { 
       "self": "http://localhost/menu-sections/23760716-1b75-4880-bae4-a6daaef3fc98" 
      } 
     }, 
     { 
      "type": "menu-item", 
      "id": "a62e2ae0-326b-4838-b5ba-ffa102fcafb1", 
      "attributes": { 
       "food-name": "Test Food", 
       "price": 350, 
       "is-hot": true, 
       "is-vegetarian": false, 
       "contains-nuts": false 
      }, 
      "links": { 
       "self": "http://localhost/menu-items/a62e2ae0-326b-4838-b5ba-ffa102fcafb1" 
      } 
     } 
    ] 
} 

de Braise je définis des modèles avec des relations appropriées comme:

// restaurant.js 
export default DS.Model.extend({ 
    title: DS.attr(), 
    contactNumber: DS.attr(), 
    restaurantAddress: DS.attr(), 
    deliveryCost: DS.attr(), 
    minimumOrder: DS.attr(), 
    menuSections: DS.hasMany('menu-section') 
}); 

// menu-section.js 
export default DS.Model.extend({ 
    title: DS.attr(), 
    description: DS.attr(), 
    restaurantDetails: DS.belongsTo('restaurant'), 
    items: DS.hasMany('menu-item') 
}); 

// menu-item.js 
export default DS.Model.extend({ 
    foodName: DS.attr(), 
    price: DS.attr(), 
    isVegetarian: DS.attr(), 
    isHot: DS.attr(), 
    containsNuts: DS.attr(), 
    menuSection: DS.belongsTo('menu-section') 
}); 

Dans ma route, je fais:

let restaurant = this.get('store').findRecord('restaurant', '0b27fd96-90e8-11e7-81c2-08002787e7fb', {include: 'menuSections,menuSections.items'}); 

Toutefois, en ce que je peux Dites alors que les objets de la section menu sont chargés, les éléments de menu ne le sont pas. Pour autant que je peux dire de mes recherches, le JSONAPI émis par le serveur est correct.

Est-ce que je fais quelque chose de mal ou est-ce que ce n'est simplement pas supporté par les ember-data?

Répondre

0

Il semble que le problème était:

"relationships": { 
       "menu-items": { 

J'ai fait l'erreur de penser que je devrais utiliser le pluriel du type ici, mais il faut faire correspondre le nom dans le modèle menu section qui était items mais devait être menuItems.