2017-01-21 7 views
1

私はゲームを作ろうとしています。私はマッチを作成する必要があります。私はこの方法の問題を考える。ユーザーがマッチを作成します。 3番目のテーブルでは、playerIdとgameIdを保存します。他のユーザーが試合に参加すると、再びplayerIdとgameIdを保存します。それから、gameIdを持つプレイヤーと共通の質問をして、ゲームを開始します。モデル間にたくさんの関係がある場合、どのようにクウェーを作るのですか?

最初に、1人のユーザーが多くのゲームを持っている可能性があります。第二に、ワンマッチは多くのゲームを持つかもしれない。これはマッチのモデルである:

module.exports = { 

    attributes: { 

    name: { 
     type: 'string' 
    }, 

    description: { 
     type: 'string' 
    }, 

    game: { 
     collection: 'game', 
     via: 'gameId', 
    } 

    } 
}; 

これは、Userモデルである:

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); 
     }) 
    } 


}; 

私はMatchを作成できますが、Game.creaこのエラーを送信してください:

_http_outgoing.js:344新しいエラーをスローする( '送信後にヘッダーを設定できません');^

エラー:送信後にヘッダーを設定できません。

誰かが私を助けることができますか?おそらく、私は多くのエラーがあります。ありがとう。ここでは、物事の

答えて

1

カップル:明示的なGameモデルを持つ

  1. は帆では必要ありません。 gameIduserIdより多くの情報を保存しない限り、暗黙的に管理することができます。だから、ちょうどGameモデルで取り除くことができます。
  2. 非同期プログラミングのために参照してください:コードの下How do I return the response from an asynchronous call?

をあなたのために働く必要があります。それが役に立てば幸い。

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"); 

     var gameObj = { 
     gameId: 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); 
     // return res.json(match); 
     }); 
    }); 
    } 
}; 
+0

ありがとう、その作品は完璧です。なぜあなたはもっと多くの情報をgameIdやuserIdよりも多くのテーブルを必要としますか?それ以外の場合は必要ありません –

+0

マッチとユーザー間の多対多の関係を格納するために_join_表が必要です。格納される情報だけが 'matchId'と' userId'(テーブルの 'id')の場合、Sailsは明示的なモデルを持たずに管理します。しかし、結合テーブルにもっと多くの属性が必要な場合、Sailsはそれを現在サポートしていません。したがって、両方の場合に結合テーブルがあります。明示的に宣言したり、暗黙的にそれを管理するフレームワークです。 多数関係:http://sailsjs.com/documentation/concepts/models-and-orm/associations/many-to-many – Sangharsh

関連する問題