【问题标题】:Sails.JS association validationSails.JS 关联验证
【发布时间】:2015-01-14 11:35:15
【问题描述】:

我在 Sails.JS 中使用了几个一对多的关联,如下所示:

用户

email: {
    type: 'string',
    required: true,
    unique: true
},
projects: {
    collection: 'project',
    via: 'user'
}

项目

name: {
    type: 'string',
    required: true,
    minLength: 3,
    maxLength: 50
},
user: {
    model: 'user',
    required: true
},
sites: {
    collection: 'site',
    via: 'project'
}

网站

project: {
    model: 'project',
    required: true
},
name: {
    type: 'string',
    required: true
}

现在,当我向 /project 发出 POST 请求时,它会很好地创建项目,并指定参数“用户”(取自会话)将项目与该特定用户相关联。

创建新网站时也是如此。但是,我似乎能够为参数“项目”指定任何数字,即使该特定项目 ID 不存在。如果项目不存在并且不创建站点,则确实应该无法通过验证。我以为它会查找与项目的关联并检查指定的项目 ID 是否有效?

另外,我只希望能够创建一个与属于当前用户的项目相关联的站点。我该怎么做呢?

提前致谢。

【问题讨论】:

    标签: sails.js waterline


    【解决方案1】:

    我不确定这是否是您不存在的项目 ID 关联的错误或预期行为,但一种解决方法是在您的模型中使用 beforeCreate 挂钩来验证项目 ID 是否存在:

    // In your Site model
    beforeCreate: function(values, next) {
      ...
      var projectID = values['project'];
      Project.findOne(projectID, function (err, project) {
        if (err || !project) return next("some error message");
        return next();
      });
    }

    您也可以在beforeCreate 钩子中检查您的第二个问题:

    // In your Site model
    beforeCreate: function(values, next) {
      ...
      var projectID = values['project'];
      Project.findOne(projectID).populate('user').exec(function (err, project) {
        if (err || !project) return next("some error message");
        if (project.user.id != values['userID']) return next("some other error message");
        return next();
      });
    }

    请注意,您必须将“userID”作为参数传递到参数中以创建站点实例。

    【讨论】:

      猜你喜欢
      • 2015-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-27
      • 1970-01-01
      • 2023-03-23
      • 2014-05-03
      • 2014-10-24
      相关资源
      最近更新 更多