创建期间的Sails.js / Waterline关联

时间:2016-11-03 21:13:03

标签: sails.js

我有一个注册表单,他们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");
    });

  }
};

1 个答案:

答案 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时可以找到它。