我在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请求时,它会创建项目,并指定参数' user' (取自会话)将项目与该特定用户相关联。
创建新网站时也是如此。但是,我似乎能够为参数项目指定任何数字,即使该特定项目ID不存在也是如此。如果项目不存在而不创建站点,它确实应该无法通过验证。我认为它会查找与项目的关联,并检查指定的项目ID是否有效?
此外,我只希望能够创建与属于当前用户的项目相关联的站点。我该怎么做呢?
提前致谢。
答案 0 :(得分: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'作为创建网站实例的参数的参数。