2017-01-04 12 views
0

NodeJS、Express、SequelizeおよびPostgreSQLを使用しています。Sequelizeを使用して多対多リレーションシップの新しいインスタンスを作成する

私には2つのモデルがあります。 「ユーザ」モデルと「ソーシャル」モデル。私は多対多の関係が必要なので、ユーザーは多くの社会を持ち、社会は多くのユーザーを持つことができます。

これはこれまでのコードです。私は、 "belongsToMany"が新しいJoinテーブルを作成することを理解しています。

モデル/ user.jsの:

'use strict'; 
module.exports = function(sequelize, DataTypes) { 
    var User = sequelize.define('User', { 
    username: DataTypes.STRING 
    }, { 
    classMethods: { 
     associate: function(models) { 
     User.belongsToMany(models.Social, {through: 'User_Social', foreignKey: 'User_rowId'}) 

     } 
    } 
    }); 
    return User; 
}; 

モデル/ social.js:

'use strict'; 
module.exports = function(sequelize, DataTypes) { 
    var Social = sequelize.define('Social', { 
    title: DataTypes.STRING, 
    description: DataTypes.TEXT 
    }, { 
    classMethods: { 
     associate: function(models) { 
     Social.belongsToMany(models.User, {through: 'User_Social', foreignKey: 'Social_rowId'}) 
     } 
    } 
    }); 
    return Social; 
}; 

ルート/ users.js

router.post('/:UserId/socials', function(req, res) { 
    userPromise = models.User.findById(req.params.UserId) 

    userPromise.then(function(user) { 
    models.Social.create({ 
    title: req.body.title, 
    description: req.body.description 
    }) 
    .then(function (social) { 
    user.addSocials([social, social.id]) 
    }) 
    .then(function() { 
    res.redirect('/'); 
    }); 
    }) 


}); 

私は新しい社会を作成しようとすると、私のウェブサイト上のフォームを使用して、これはコンソールに表示されるエラーです:

Unhandled rejection SequelizeUniqueConstraintError: Validation error 
    at Query.formatError (meetup-app/node_modules/sequelize/lib/dialects/postgres/query.js:326:16) 
    at null.<anonymous> (meetup-app/node_modules/sequelize/lib/dialects/postgres/query.js:88:19) 
    at emitOne (events.js:77:13) 
    at emit (events.js:169:7) 
    at Query.handleError (meetup-app/node_modules/pg/lib/query.js:131:8) 
    at null.<anonymous> (meetup-app/node_modules/pg/lib/client.js:180:26) 
    at emitOne (events.js:77:13) 
    at emit (events.js:169:7) 
    at Socket.<anonymous> (meetup-app/node_modules/pg/lib/connection.js:121:12) 
    at emitOne (events.js:77:13) 
    at Socket.emit (events.js:169:7) 
    at readableAddChunk (_stream_readable.js:146:16) 
    at Socket.Readable.push (_stream_readable.js:110:10) 
    at TCP.onread (net.js:523:20) 

何か助けていただければ幸いです!

+0

routes/users.jsのどこでエラーが発生したか分からなかったので、これは良い質問ではありません – jjbskir

+0

私はすべてのコードを見ていませんでしたが、ここではuser.addSocials([social、social.id])かもしれませんuser.addSocials(ソーシャル) –

答えて

0

エラーは、同じIDを持つ2つのソーシャルのインスタンスを作成したことです。これは一意である必要があります。その関連付けを追加する正しい方法は、user.addSocial(social)です。

関連する問題