SailsJS唯一性范围多列

时间:2015-02-02 08:06:41

标签: sails.js

对于单一唯一性检查:

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

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

有没有办法根据跨越1列以上的唯一性限制模型创建/更新?现在假设我需要使用字符串+ dateTime来使表是唯一的。像validates :title, uniqueness: { scope: :dateTime, :case_sensitive => false } in Rails.

这样的东西

2 个答案:

答案 0 :(得分:1)

您可以使用afterValidate在多个列中添加自己的验证。

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);
    });
}

答案 1 :(得分:0)

当我发现这个技巧可行时,我正在寻找这个问题的答案。

对于这个模型

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)

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 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)