【问题标题】:Sails.js/Waterline association during create创建期间的 Sails.js/Waterline 关联
【发布时间】:2016-11-04 18:43:57
【问题描述】:

我有一个注册表单,它 POST 到连接到用户模型的 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");
    });

  }
};

【问题讨论】:

    标签: sails.js


    【解决方案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 时找到它。

    【讨论】:

    • 您不仅提供了一个很好的答案,而且还了解到 Waterline 只需在请求中提供键即可在关联表中创建记录。非常感谢您的帮助。 PS,我会更新问题以反映您对该主题的评论。
    猜你喜欢
    • 2014-12-19
    • 2015-01-06
    • 2015-02-21
    • 1970-01-01
    • 1970-01-01
    • 2015-02-01
    • 1970-01-01
    • 2014-06-23
    • 1970-01-01
    相关资源
    最近更新 更多