'validates_uniqueness_of' - 如何获取错误消息

时间:2012-03-28 11:38:43

标签: mongodb mongoid

我有模特:

# 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 个答案:

答案 0 :(得分: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