2016-11-03 5 views
0

ユーザーモデルに接続されたUserControllerへのPOSTのサインアップフォームがあります。ユーザーは組織に所属しています。サインアップ中に新しい組織行が作成され、作成されたばかりのユーザーに適切な関係がセットアップされるようにしたい。これは、ユーザーの作成段階でSails/Waterlineで可能ですか?Sails.js /作成中のウォーターライン関連

signup.ejs

<h1>Signup</h1> 
<form method="POST" action="/organization/users/"> 
    <input type="email" name="email"> 
    <input type="password" name="password"> 
    <input type="text" name="organizationName"> 
    <input type="submit" value="submit"> 
</form> 

user.jsの(モデル)

module.exports = { 
    attributes: { 
     email: { 
      type: 'email', 
      required: true, 
      unique: true 
     }, 
     password: { 
      type: 'string', 
      minLength: 6, 
      required: true 
     }, 
     organization: { 
      model: 'organization' 
     } 
    } 
}; 

UserController.js

module.exports = { 
    create: function (req, res) { 
    var options = { 
     name: req.param('email'), 
     password: req.param('password') 
    }; 

    User.create(options).exec(function(err, user) { 
     return res.redirect("/users"); 
    }); 

    } 
}; 

答えて

1

Iそれがより適切だと思うこれは水線で可能ですか...あなたが求めていることは、水線ができることにもっと関心があるからです。 waterline documentationをチェックしてください。

名前が存在しない場合は、組織の新しいレコードを作成し、idをuser.organizationに割り当てることができます。

create: function (req, res) { 
    var options = { 
     name: req.param('email'), 
     password: req.param('password') 
    }; 

    Organization.findOrCreate({name: req.param('organization')}) 
     .exec(function(err,org){ 
     options.organization = org.id; 
     User.create(options).exec(function(err, user) { 
      return res.redirect("/users"); 
     }); 
     }); 
    } 

アクションを作成しかし、あなたは新しいレコードに新しいユーザーを作成するたびに作成したい場合は、あなたがこれを行うことができます:

アクション

create: function (req, res) { 
    var options = { 
     name: req.param('email'), 
     password: req.param('password'), 
     organization: { 
     name: req.param("organization") 
     } 
    }; 

    User.create(options).exec(function(err, user) { 
     return res.redirect("/users"); 
    }); 
    } 
を作成

毎回ウォーターラインが新しい組織を作成するユーザーが作成されます。

注:

1)findOrCreateはアトミックではありませんので、高い並列性を期待するとき、作成し、何も見つからない場合、検索によって実装されているので、それを使用しないでください。

2)私はModel.createの動作が実証されているかどうかわからないんだけど、人口属性の()with a new recordを.add使用しているとき、あなたはそれを見つけることができます。

+0

あなたは優れた答えを出しただけでなく、ウォーターラインがリクエストにキーを提供するだけで、関連するテーブルにレコードを作成することも知っていました。あなたの助けは本当に感謝しています。 PS、件名に関するあなたのコメントを反映するために質問を更新します。 – user1885523

関連する問題