Я пытаюсь сделать игру. Мне нужно создать матч. Я думаю, проблема на этом пути. Пользователь создает совпадение. В третьей таблице я сохраняю playerId и gameId. Когда другой пользователь присоединяется к матчу, я снова сохраняю playerId и gameId. Затем я делаю запрос с игроком с общей игрой и начинаю игру.Как сделать запросы, когда tou имеет много-много отношений между моделями?
первый, у одного пользователя может быть много игр. во-вторых, у One Match может быть много игр. это матч модель:
module.exports = {
attributes: {
name: {
type: 'string'
},
description: {
type: 'string'
},
game: {
collection: 'game',
via: 'gameId',
}
}
};
Это модель пользователя:
var bcrypt = require('bcrypt');
module.exports = {
attributes: {
name: {
type:'string'
},
email: {
type: 'email',
required: true,
unique: true
},
password: {
type: 'string',
},
passwordConfirmation: {
type: 'string'
},
passwordEncrypted: {
type: 'string'
},
creator: {
collection: 'game',
via: 'playerId'
},
toJSON: function(){
var obj = this.toObject();
delete obj.password;
delete obj.passwordConfirmation;
delete obj._csrf;
return obj;
}
}, beforeCreate: function(values, next){
console.log("Acabo de entrar a eforeCreate");
var password = values.password;
var passwordConfirmation = values.passwordConfirmation;
if(!password || !passwordConfirmation || password != values.passwordConfirmation) {
var passwordDoesNotMatchError = [{
name: 'passwordDoesNotMatchError',
message: 'Las contraseñas deben coincidir'
}]
return next({
err: passwordDoesNotMatchError
});
}
require('bcrypt').hash(values.password, 10, function passwordEncrypted(err, EncryptedPassword){
values.EncryptedPassword = EncryptedPassword;
next();
});
}
};
Это модель игры:
module.exports = {
attributes: {
gameId: {
model: 'match'
},
playerId: {
model: 'user'
}
}
};
наконец, это мой контроллер:
module.exports = {
createMatch: function(req,res){
var matchObj = {
name: req.param('name'),
description: req.param('description'),
}
Match.create(matchObj, function(err, match){
if(err){
console.log("el error fue: " + err);
return res.send(err);
} console.log("Entro en create");
return res.json(match);
})
var gameObj = {
gameId: 'aclaration: I dont know how do I get the match.id',
playerId: req.session.me
}
Game.create(gameObj,function(err,game){
console.log("entro a GameCreate");
if(err){
return res.send(err);
} return res.json(game);
})
}
};
Я могу создать Матч, но Game.crea te отправить эту ошибку:
_http_outgoing.js: 344 throw new Error ('Can \' t установить заголовки после их отправки. ');^
Ошибка: не удается установить заголовки после их отправки.
Кто-нибудь может мне помочь? вероятно, у меня много ошибок. Благодарю.
Спасибо, друг, его работы отлично. Почему вы хотите хранить больше информации, чем gameId и userId вам нужна еще таблица? И в противном случае это не обязательно –
Стол _join_ необходим для хранения многих и многих отношений между Match и User. Если только хранимая информация является 'matchId' и' userId' ('id' таблицы), то Sails управляет ею без явной модели. Однако, если в таблице соединений требуется больше атрибутов, Sails пока не поддерживает его. Таким образом, таблица соединений присутствует в обоих случаях, это просто случай объявления ее явно или фреймворк, управляющий им неявно. Много-много отношений: http://sailsjs.com/documentation/concepts/models-and-orm/associations/many-to-many – Sangharsh