我有模特:
# 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
如果我在测试执行后查看集合,我将只找到一条记录,但是我希望在重复记录插入的情况下捕获异常。
有可能吗?
答案 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。