Как сохранить объекты со связью many-to-many в Ember.js?

Долго бьюсь над проблемой, потому подозреваю, что решение элементарно. Свёл к абстрактной упрощённой модели. Предположим есть пациент и жалобы
// Модель пациента
Yo.Patient = DS.Model.extend({
    firstName: DS.attr('string'),
    lastName: DS.attr('string'),
    zhalobs: DS.hasMany('zhaloba')
});
// Модель жалобы
Yo.Zhaloba = DS.Model.extend({
    title: DS.attr('string'),
    patients: DS.hasMany('patient')
});

В пациенте должны быть записаны все жалобы, в жалобе все пациенты.
Пробую перед сохранением пациента вставить ему pushObjects с массивом объектов-жалоб, затем сохраняю пациента. После этого бегу по массиву жалоб и каждой делаю pushObject с новым пациентом.
newPatient.get('zhalobs').pushObjects(zs);
newPatient.save().then(function (p) {
    for (var i = 0; i < zhalobs.length; i++) {
        zhalobs[i].get('patients').pushObject(p);
        zhalobs[i].save();
    };
});

Но в итоге получаю совсем не то, что нужно.
1. У пациента жалобы не сохраняются. Причём в POST request поле zhalobs является пустым массивом. Значит проблема не в сервере.
2. У жалоб добавляется пациент, но нулевым элементом массива всегда устанавливается null.

Я с Ember общаюсь совсем недавно, может не правильно понял его логику действий. Буду благодарен совету.
  • Вопрос задан
  • 2433 просмотра
Пригласить эксперта
Ответы на вопрос 1
Kaer_Morchen
@Kaer_Morchen
Разрабатываю web-приложения.
Сталкивался с подобной проблемой, плохо помню как решал, кажется так:

DS.JSONSerializer.reopen({
    serializeHasMany : function(record, json, relationship) {
        var key = relationship.key;

        var relationshipType = DS.RelationshipChange.determineRelationshipType(
            record.constructor, relationship);

        if (relationshipType === 'manyToNone'
            || relationshipType === 'manyToMany'
            || relationshipType === 'manyToOne') {
            json[key] = Ember.get(record, key).mapBy('id');
            //TODO support for polymorphic manyToNone and manyToMany relationships
        }
    }
});


Советую обновить ember-data до последней версии (на данный момент 1.0.0-beta.11)

В вашем случае лучше использовать EXPLICIT INVERSES

Очень полезная статья, по связям между моделями.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы