2016-06-22 23 views
0

私はこのように定義された2つのモデルがあります:要求ループの処理方法は?

user.jsのユーザーUser.addRiderで

var sequelize = require('../database.js').sequelize, 
    Sequelize = require('../database.js').Sequelize, 
    userAttributes = require('./userAttributes.js'); 

User = sequelize.define('user', {},{ 
    classMethods: { 
     createRider: function(params) { 
      var reqs = ['name', 'phone', 'fbprofile'], 
       values = [], 
       newUser; 
      reqs.forEach((req) => { 
       var value = params[req]; 
      }); 

      //Here I want to use the userAttributes-object. 

      return newUser; 
     } 
    } 
}); 

module.exports = User; 

userAttributes.js

var sequelize = require('../database.js').sequelize, 
    Sequelize = require('../database.js').Sequelize, 
    User = require('./user.js'); 

UserAttribute = sequelize.define('userAttributes', { 
    name:  Sequelize.STRING, 
    value:  Sequelize.STRING, 
}); 
UserAttribute.belongsTo(User); 

module.exports = UserAttribute; 

を私はUSERATTRIBUTESにいくつかのレコードを追加したいので、私そのモデルをユーザーに組み込みたいuserAttributesでは、ユーザーにそれをbelongsToとして定義するように要求する必要があります。これはうまくいかないようです。これをどうすれば解決できますか?

+0

問題は、ファイルの先頭にrequireを置くことに起因します(循環ファイルの依存関係が必要な場合)。 UserAttributeの割り当てが行われた後、Userが必要とし、UserAttributeはUserが割り当てられた後に必要となります。非常にきれいではないにもかかわらず動作するはずです。 – Catalyst

+0

循環依存関係がない場合はどうすればよいですか? – Himmators

+0

"insist"と言うのはちょっと不公平かもしれません - Sequelizeはこのように物事を望んでいるようです。 UserAttribute定義をUserと同じファイルに入れてUser Definitionの直下に置くのはなぜでしょうか? UserAttributesは、createRider関数が呼び出されるまでに定義されるため、これはうまくいくはずです。 – Catalyst

答えて

0

すべてのモデルをインポートして、すべてのモデルをインポートした後に、それらを関連付ける単一のファイルを使用できます。この方法では、循環参照は必要ありません。

この質問の2番目に一般的な答えは、それを行う方法について説明しています。How to organize a node app that uses sequelize?

関連する問題