2012-04-07 4 views
4

У меня есть модель:validates_uniqueness_of двумя полями

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 ] 

Но когда я пытаюсь вставить 2 другой документ с таким же именем, но разными assigned_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 

Если я прокомментирую эту строку, все будет работать нормально.

ответ

13

Mongoid:

validates_uniqueness_of :name, :scope => :assignment_date 

Из документов: Обратите внимание, что для встраиваемых документов, это будет только проверить, что поле является уникальным в контексте родительского документа, а не всей базы данных.

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

14

Согласно наблюдениям this рельсов руководства вы можете сделать следующее:

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

Я не использую Rails – demas

+6

Может быть, не рельсы, но вы используете ActiveModel, который используется по рельсам, следовательно, валидация являются своего рода то же самое. Но спасибо за downvote! – Vapire

Смежные вопросы