我有一个使用条件定义的唯一约束。但以下测试未通过:
class Dummy
include Mongoid::Document
field :name, :type => String
field :status, :type => Boolean
validates_uniqueness_of :name, if: :status
end
describe "UniquenessValidator" do
let!(:d1) { Dummy.create!(name: 'NAME_1', status: true) }
let!(:d2) { Dummy.create!(name: 'NAME_1', status: false) }
it "should raise an error" do
expect {
d2.status = true
d2.save!
}.to raise_error
end
end
由于name_changed?
为假,似乎没有发生验证,因此不检查唯一性条件。
这是一个错误吗?还是我忘记了什么?我想这是一种优化,可以避免每次修改元素时都运行验证。
在那种情况下,当状态改变时触发验证的好方法是什么?
谢谢!