使用两个字段进行唯一性验证的 validates_uniqueness_of

6

我有一个模型:

class Action
  include Mongoid::Document
  field :name, type: String
  field :assignment_date, type: Date
  ...

  index(
    [
      [ :name, Mongo::ASCENDING ],
      [ :assignment_date, Mongo::ASCENDING ]
      ], 
      unique: true
  )

  validates_uniqueness_of [ :name, :assignment_date ]

但是,当我试图插入两个不同的文档,但名称相同、分配日期不同时,就会出现错误:

Mongoid::Errors::Validations - Validation failed - Name is already taken, Assignment date is already taken.:

我已经尝试了两个版本:

  validates_uniqueness_of [ :name, :assignment_date ]

并且

  validates_uniqueness_of :name, :assignment_date 

如果我注释掉这行代码,一切都能正常工作。
2个回答

15

Mongoid:

validates_uniqueness_of :name, :scope => :assignment_date

从文档中可以看到:需要注意的是,对于嵌入式文档,这仅会检查该字段在父文档的范围内是否唯一,而不是整个数据库。

http://mongoid.org/docs/validation.html


14

根据 这篇 Rails 指南,你可以执行以下操作:

validates :assignment_date, :uniqueness => { :scope => :name } 

6
也许不是Rails,但您正在使用被Rails使用的ActiveModel,因此验证有点相似。但是感谢您的负评! - Vapire

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接