Не могу установить отношения с Эмбер Мираж

В настоящее время я пишу тесты для своего приложения, написанного с помощью EmberJS. Я использую Мираж. У меня есть две следующие модели:

мираж/модели/paperwork.js

export default Model.extend({
customer: belongsTo('customer'),
paperwork_products: hasMany('paperwork-product', { inverse: 'paperwork' }),

мираж/модели/документы-product.js

export default Model.extend({
paperwork: belongsTo('paperwork', { inverse: 'paperwork_products' }),
});

В моем сценарии я создаю свои данные следующим образом:

const paperwork = server.create('paperwork');                                                                                   
const paperworkProduct = server.create('paperwork-product', { paperwork });                      
paperwork.paperwork_products.add(paperworkProduct);

Мой маршрут:

export default ApplicationRoute.extend({
    model(params) {
        return this.store.findRecord('paperwork', params.paperwork_id, { include: 'paperwork_products' }),        
    },
});

Проблема в том, что я не могу получить доступ к paperwork.paperwork_products в своем шаблоне. Он не определен (здесь указаны другие атрибуты оформления документов, но не отношения). Я уже даже пробовал ставить отладчик в свой mirage/config.js при объявлении маршрутов. Мои документы существуют, и его "документы_продукты" тоже. Но я не могу получить данные paperwork_products в своем шаблоне. Что я делаю не так ? Я думаю, что я должен что-то изменить в моем:

this.get('v1/paperworks/:id');

Но я не знаю, что... Заранее спасибо!

Редактировать: Вот мои настоящие модели Ember:

модели/paperwork.js

export default DS.Model.extend({
    customer: DS.belongsTo('customer'),
    paperwork_products: DS.hasMany('paperwork-product', { async: true }),
});

модели/документы-product.js

export default DS.Model.extend({
  paperwork: DS.belongsTo('paperwork'),
});

Вчера я попытался сравнить реальный ответ JsonApi со своей спины и ответ Mirage, и я увидел, что в хэше отношений мое отношение «paperwork_products» было изменено на paperwork-products (с Mirage). Так что есть проблема с отношениями с подчеркиванием или моделями с тире... В config.js я пробовал издеваться над JSONAPI Backend, и это хорошо работает. Просто заменил «бумажные продукты» на «бумажные_продукты».

Ответ Миража:

"relationships":{  
    "customer":{  
        "data":{  
            "type":"customers",
            "id":"1"
        }
    },
    "paperwork-products":{  
        "data":[  
            {  
                "type":"paperwork-products",
                "id":"1"
            }
        ]
    }
}

Должно быть :

"relationships":{  
    "customer":{  
        "data":{  
            "type":"customers",
            "id":"1"
        }
    },
    "paperwork_products":{  
        "data":[  
            {  
                "type":"paperwork_products",
                "id":"1"
            }
        ]
    }
}

В других моих моделях с отношениями hasMany проблем нет.


person Seybol    schedule 17.10.2017    source источник


Ответы (1)


Чтобы подтвердить, есть ли у вас настроенные модели данных Ember с такими же отношениями? Без них все может быть. Очень хорошо работает...

Если да, не могли бы вы опубликовать и эти модели?

Кроме того, к вашему сведению, Mirage 0.3.0 поставляется с настройкой автоматической синхронизации, которая будет считывать ваши модели Ember Data и создавать соответствующие модели Mirage без каких-либо действий. Это было прекрасно ...

Редактировать: я бы посоветовал вам переработать модель данных Ember, чтобы использовать отношения в верблюжьем корпусе. Если вы сделаете следующее:

модели/paperwork.js

export default DS.Model.extend({
    customer: DS.belongsTo('customer'),
    paperworkProducts: DS.hasMany('paperwork-product', { async: true }),
});

Я ожидаю, что это будет работать без проблем, поскольку Ember Data автоматически переводит отношения в стиле camelCased в соответствующий ключ JSON-API.

Это работает для вас?

person acorncom    schedule 19.10.2017
comment
Я отредактировал свой основной пост. Я добавил другие детали. Спасибо за Ваш ответ. - person Seybol; 19.10.2017