2012-03-28 8 views
0

I Modell habe zu erhalten:'validates_uniqueness_of' - wie Fehlermeldung

# 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 

Und ich habe Test für das Modell:

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 

Wenn ich Sammlung nach der Testdurchführung aussehen werde ich finden nur ein Datensatz, aber ich möchte eine Ausnahme im Falle der doppelten Datensatz einfügen.

Ist es möglich?

Antwort

2

Standardmäßig schreibt Mongoid in den Modus "Feuer und Vergessen". Es sendet einen Schreibvorgang und kehrt sofort zurück. Um auf Fehler zu prüfen, sollten Sie im "abgesicherten Modus" schreiben. Versuche dies.

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 

Oder, noch besser,

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

Siehe the doc here.

+0

NoMethodError: undefinierte Methode 'Sicherheit 'für # demas

+0

Es ist' sicher', nicht 'Sicherheit'. –

+0

Danke. Ich repariere es, aber habe keine Fehlermeldung in der Konsole in meinem Test bekommen. Warum? – demas

Verwandte Themen