Привет и спасибо, что нашли время ответить на мой вопрос.Проблема с добавлением записи с несколькими отношениями
У меня есть следующие модели:
App.Project = DS.Model.extend({
name: DS.attr('string'),
project_teams: DS.hasMany('project_team'),
});
App.ProjectTeam = DS.Model.extend({
val: DS.attr('number'),
project: DS.belongsTo('project'),
team: DS.belongsTo('team')
});
App.Team = DS.Model.extend({
project_teams: DS.hasMany('project_team'),
name: DS.attr('string')
});
ProjectTeam в основном связь между проектом и командой, и она имеет некоторые дополнительные метаданные. Проект может иметь несколько команд, работающих над ним через модель ProjectTeam.
У меня есть следующий код в моем ProjectController:
var project = store.createRecord('project', {
name: projectName
});
project.save().then(function(record){
Ember.run.next(function(){
for(var i = 0; i < valArr.length; i++){
var retTeam;
store.find('team', teamIds[i]).then(function(team){
Ember.run.next(function(){
retTeam = team;
console.log(team);
});
});
console.log(record);
var project_team = store.createRecord('project_team', {
project: record,
val: valArr[i],
team: retTeam
});
project_team.save().then(function(pt){
Ember.run.next(function(){
projectTeamIds.push(pt.get('id'));
if(i === sdeHeads.length){
record.set('project_teams', projectTeamIds);
record.save();
}
});
});
//
}
});
});
Во-первых, мне нужно добавить объект проекта, который я делаю. После этого я добавляю несколько объектов ProjectTeam, и мне нужно связать их с вновь вставленным идентификатором проекта. Я ударился головой, пытаясь понять, почему это не будет работать в течение многих часов безрезультатно. Интересно, заметили ли вы мою ошибку.
Я могу добавить объекты проекта, и они сохраняются в БД. Также я могу добавить объект ProjectTeam, но они не связаны с командой или проектом. Я проверил JSON и эти поля (проект и команды) равны нулю:/
В основном это должно быть поток:
- Создание объекта проекта
- получить идентификатор проекта и добавить несколько ProjectTeam объектов
EDIT:
Другой подход, который я попробовал, который также не работал ..
var project = store.createRecord('project', {
name: projectName
});
for(var i = 0; i < sdeHeads.length; i++){
store.find('team', teamIds[i]).then(function(team){
var project_team = store.createRecord('project_team', {
sde_effort: sdeEffort,
team: team
});
project.get('project_teams').pushObject(project_team);
});
}
project.save();
Другой подход состоял в том, чтобы создать объект проекта, вставить объект children и только затем сохранить его в db. Однако этот подход не сработал, так как теперь Project_Teams вообще не добавляются в db. Код в пределах store.find('team', teamIds[i]).then(function(team){
не выполняется вообще. Там либо должен быть более простой способ сделать это, либо у Ember все еще есть способ пойти .. Действительно расстраивает ..
Спасибо за вашу помощь!
Я боюсь, что не так много изменилось. Теперь это то, что происходит: 1) Создается проект (без самого важного hasmany поля project_teams, который ожидается. 2) Команды извлекаются (путем создания операции Project_team).Пока что так хорошо 3) Теперь создаются Project_teams, поля для проекта и команды - все нулевые! :/После этого вызывается projectRecord.save(), но я не вижу ничего в запросе PUT, потому что он дает мне статус 204 (без содержимого) ... Есть ли другой способ обойти это? Человек, почему они сделали это настолько жестким и трудным в работе? – Dragan
@ kingping2k Я отредактировал мой оригинальный вопрос с другим подходом, который тоже не удался! – Dragan
проблема не была связана с ember, но поля объектов на пентоне не соответствовали тем, что были на бэкэнде. proect! = project_id. Спасибо, хотя я ценю вашу помощь! – Dragan