2012-03-28 102 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