Sails.js SailsJS唯一性作用域多列

Sails.js SailsJS唯一性作用域多列,sails.js,Sails.js,对于单个唯一性检查: title: { type: 'string', required: true, unique: true } dateTime: { type: 'string', required: true, unique: true } 是否有一种方法可以限制基于跨越超过1列的唯一性的模型创建/更新?假设现在我需要使用string+dateTime使表唯一。类似于Rails中的验证:titl

对于单个唯一性检查:

title: {
      type: 'string',
      required: true,
      unique: true
    }

dateTime: {
      type: 'string',
      required: true,
      unique: true
    }
是否有一种方法可以限制基于跨越超过1列的唯一性的模型创建/更新?假设现在我需要使用string+dateTime使表唯一。类似于Rails中的
验证:title,university:{scope::dateTime,:区分大小写=>false}。

您可以使用它跨多个列添加自己的验证

afterValidate: function (values, cb) {
    Foo.findOne({
        title: values.title,
        dateTime: values.dateTime
    }).exec(function(err, foo){
        if(err) return cb(err);
        if(foo) return cb('Not unique');
        cb(null, values);
    });
}

我正在寻找这个问题的答案,这时我发现这个技巧可以奏效

对于这个模型

title: {
  type: 'string',
  required: true,
} 
dateTime: {
  type: 'string',
  required: true,
}
我们可以使用

Model.findOrCreate({title:"Your Title",dateTime:"DateTime"}).exec(console.log)
此处,unique=true从两个属性中删除。以下是问题中最初提出的使用unique=true的效果

a) 不使用unique=true时

Data 1: title="Google", dateTime="2015-05-25T10:26:20.428Z" | will get accepeted
Data 2: title="Facebook", dateTime="2015-05-25T10:26:20.428Z" | will get accepeted
Data 3: title="Google", dateTime="2015-05-25T10:26:20.428Z" | will get rejected (because same as 1)
Data 1: title="Google", dateTime="2015-05-25T10:26:20.428Z" | will get accepeted
Data 2: title="Facebook", dateTime="2015-05-25T10:26:20.428Z" | will get rejected (because dateTime is same as 1)
Data 3: title="Facebook", dateTime="2016-06-26T10:26:20.428Z" | will get rejected (because title is same as 2)
b) 使用unique=true时

Data 1: title="Google", dateTime="2015-05-25T10:26:20.428Z" | will get accepeted
Data 2: title="Facebook", dateTime="2015-05-25T10:26:20.428Z" | will get accepeted
Data 3: title="Google", dateTime="2015-05-25T10:26:20.428Z" | will get rejected (because same as 1)
Data 1: title="Google", dateTime="2015-05-25T10:26:20.428Z" | will get accepeted
Data 2: title="Facebook", dateTime="2015-05-25T10:26:20.428Z" | will get rejected (because dateTime is same as 1)
Data 3: title="Facebook", dateTime="2016-06-26T10:26:20.428Z" | will get rejected (because title is same as 2)

哇,这正是我所做的,但我认为应该有更好的方法。我想我会接受的。我只是希望我不必做那么多不必要的询问。你似乎已经回答了我很多问题。你是sails的贡献者吗?还不到:)我已经使用sails大约一年了,所以我对很多概念都很熟悉。我得到了很多帮助,所以我只是在回馈。此外,如果你想让某人看看一个特别棘手的问题,那么这些债券的状况也非常好。如果我不能为回购协议出资,我宁愿不提出问题。事实上我知道整件事是怎么回事。让它工作起来可能有一些困难,但从Rails来看,我觉得许多常见问题仍然没有在sails中得到解决。但上次我检查它有超过10公里的星星。似乎是其中一个比较流行的nodejs框架。