2012-03-28 6 views
0

я модель:«validates_uniqueness_of» - как получить сообщение об ошибке

# encoding: utf-8 

class Tag 
    include Mongoid::Document 
    field :name, type: String 
    field :count, type: Integer 
    index :name, unique: true 

    validates_uniqueness_of :name 

    def self.create_tag(name) 
     tag = Tag.new 
     tag.name = name 
     tag.count = 0 
     tag.save 
    end 

    def self.find_by_name(name) 
     Tag.where(name: name).entries 
    end 
end 

И у меня есть тест на модели:

describe Tag, "# simple database operations" do 
    it " - insert test records" do 
     Tag.create_tag("joe") 
     Tag.create_tag("joe") 

     p Tag.find_by_name("joe") 
    end 
end 

Если посмотреть на коллекцию после выполнения теста, я найду только одна запись, но я хочу получить исключение в случае дублирования записи.

Возможно ли это?

ответ

2

По умолчанию Mongoid пишет в режиме «огонь и забыть». Он отправляет запись и немедленно возвращается. Чтобы проверить наличие ошибки, вы должны написать «безопасный режим». Попробуй это.

def self.create_tag(name) 
    tag = Tag.new 
    tag.name = name 
    tag.count = 0 
    tag.safely.save! # <= note the 'safely' here. Also bang version of save is used. 
end 

Или, еще лучше,

def self.create_tag(name) 
    Tag.safely.create!(name: name, count: 0) 
end 

См the doc here.

+0

NoMethodError: undefined method 'safety 'for # demas

+0

Это' безопасно', а не 'безопасность'. –

+0

Спасибо. Я исправлю это, но не получил сообщение об ошибке в консоли в своем тесте. Зачем? – demas

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