validates_uniqueness_of由两个字段组成

dem*_*mas 6 ruby mongodb mongoid

我有这个型号:

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 ]
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试插入具有相同名称但不同的assigned_date的2个不同文档时,我收到错误:

Mongoid::Errors::Validations - Validation failed - Name is already taken, Assignment date is already taken.:
Run Code Online (Sandbox Code Playgroud)

我试过两个版本:

  validates_uniqueness_of [ :name, :assignment_date ]
Run Code Online (Sandbox Code Playgroud)

  validates_uniqueness_of :name, :assignment_date 
Run Code Online (Sandbox Code Playgroud)

如果我评论这一行,一切正常.

joe*_*son 15

Mongoid:

validates_uniqueness_of :name, :scope => :assignment_date
Run Code Online (Sandbox Code Playgroud)

从文档:请注意,对于嵌入式文档,这只会检查该字段在父文档的上下文中是唯一的,而不是整个数据库.

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


Vap*_*ire 14

根据导轨指南,您可以执行以下操作:

validates :assignment_date, :uniqueness => { :scope => :name } 
Run Code Online (Sandbox Code Playgroud)

  • 也许不是rails,但你正在使用rails正在使用的ActiveModel,因此验证有点相同.但感谢downvote! (6认同)