2012-03-28 98 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以「fire and forget」模式寫入。它發送一個寫並立即返回。要檢查錯誤,您應該寫入「安全模式」。嘗試這個。

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:未定義的方法'安全'爲#<標記:0x3d8fab0> – demas 2012-03-28 11:43:14

+0

它是安全的,而不是安全的。 – 2012-03-28 11:45:26

+0

謝謝。我修復了它,但沒有在測試中的控制檯中得到thr錯誤消息。爲什麼? – demas 2012-03-28 11:52:02