У меня есть простая потребность добавлять теги к пациентам. Я следил за документацией «Паруса и ватерлиния», касающейся ассоциаций «многие ко многим», но в какой-то момент она не работает (ошибок нет). Я использую MongoDB для хранения данных. Код ниже:Sails.js - многие-ко-многим не удается сэкономить
Tag Модель
module.exports = {
attributes: {
name: 'STRING',
color: {
type: 'STRING',
defaultsTo: '#777777'
},
tagged: {
collection: 'patient',
via: 'tags',
dominant: true
}
}
};
Модель пациента
module.exports = {
attributes: {
name: 'STRING',
tags: {
collection: 'tag',
via: 'tagged'
}
}
};
И это метод управления, который пытается связать данные:
module.exports = {
addToPatient: function(req, res) {
Patient.findOne({id: req.param('patientId')}).exec(function(err, patient) {
// Queue up a record to be inserted into the join table
patient.tags.add(req.param('tagId'));
// Save the user, creating the new associations in the join table
patient.save(function(err) {});
});
res.send("tag assigned");
}
};
Я проверил ответы при различных перерывах, и все, кажется, проходит очень хорошо. Пациент найден. Функция сохранения показывает ассоциацию тегов в объекте пациента, но в базе данных ничего не добавляется. Я предполагаю, что я увижу либо созданную таблицу соединений, либо что-то в коллекциях пациентов/тегов, чтобы обозначить ассоциацию, но я ничего не вижу. Я так смущен. Если я получаю HTTP-сообщение, я получаю ответ «с тегом». Что мне не хватает?
Прекрасно работает для меня на Mongo с вашим точным кодом и создает коллекцию 'patient_tags__tag_tagged'. Вы должны переместить 'res.send' внутри обратного вызова для' patient.save', хотя - сейчас он всегда будет говорить «назначенный тег», даже если произошла ошибка. – sgress454