String -6ren">
gpt4 book ai didi

ruby - Mongoid : The Validation "validates_uniqueness_of" is only triggered when the specific field changes

转载 作者:数据小太阳 更新时间:2023-10-29 06:59:23 28 4
gpt4 key购买 nike

我有一个使用条件定义的唯一约束。但是下面的测试没有通过:

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? 是假的,似乎没有验证发生,因此没有检查唯一性条件。

这是一个错误吗?还是我忘记了什么?我想这是一种优化,可以避免每次修改元素时都运行验证。

在那种情况下,当状态改变时触发验证的好方法是什么?

谢谢!

最佳答案

由于您的情况是边缘情况,我建议您为此创建自己的验证器类,这样的事情应该可行:

class NameUniquenessValidator < Mongoid::Validatable::UniquenessValidator
private
def validation_required?(document, attribute)
return true "name" == attribute.to_s
super
end
end

class Dummy
include Mongoid::Document

field :name, :type => String
field :status, :type => Boolean

validates_with(NameUniquenessValidator, :name, if: :status)
end

关于ruby - Mongoid : The Validation "validates_uniqueness_of" is only triggered when the specific field changes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19546899/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com