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

私は見つけることができますレコードは1つしかありませんが、重複したレコード挿入の場合は例外をキャッチしたいと思います。

可能ですか?

答えて

2

デフォルトでは、モンゴイドは「火と忘れ」モードで書き込みます。書き込みを送信してすぐに戻ります。エラーをチェックするには、 "セーフモード"と書いてください。これを試して。

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:#の意味がありません。 – demas

+0

安全ではなく安全です。 –

+0

ありがとうございます。私はそれを修正しましたが、私のテストでコンソールにthrエラーメッセージが表示されませんでした。どうして? – demas

関連する問題