我有一个注册表单,他们POST到连接到User模型的UserController。用户属于组织。我希望在注册期间创建一个新的组织行,并为刚刚创建的用户设置正确的关系。在用户的创建步骤中是否可以使用Sails / Waterline?
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");
});
}
};
答案 0 :(得分:1)
我认为这更合适水线是否可行...... 因为你所要求的更关心的是水线能做什么。查看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");
});
}
Waterline将创建一个新组织每次创建一个用户。
注意:强>
1)findOrCreate不是原子的,所以不要在预期的高并发性时使用它,因为它是由find实现的,如果没有找到,则为create。
2)我不确定是否记录了 Model.create 的行为,但是在使用填充属性的.add()with a new record时可以找到它。