2016-11-03 119 views
0

我有一个注册表单,通过POST来连接到User模型的UserController。用户属于组织。我希望在注册过程中创建一个新的组织行,并为正在创建的用户设置适当的关系。 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

我认为这是更合适的这是可能的水线...因为你问的是更关心什么水线可以做。检查出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时找到它。

+0

您不仅提供了一个很好的答案,而且还了解到Waterline将通过在请求中提供密钥来在关联表中创建记录。你的帮助是真正的赞赏。 PS,我会更新这个问题以反映你对这个主题的评论。 – user1885523