下面我可以成功地在运行时向Mongoid添加验证:
class Abc
include Mongoid::Document
field :something, type: String
end
a = Abc.new
a.valid?
=> true
Abc.class_eval do
validates_presence_of :something
end
=> [Mongoid::Validatable::PresenceValidator]
b = Abc.new
=> #<Abc _id: 55948e466d616344a4010000, something: nil>
b.valid?
=> false
如何删除验证?如果可能的话,我认为ActiveRecord和Mongoid都是一样的。
我正在寻找类似的东西:
Abc.class_eval do
remove_validates_presence_of :something
end
答案 0 :(得分:2)
我认为您会在此博文中找到您想要的内容:http://gistflow.com/posts/749-canceling-validations-in-activerecord
基本上,验证器信息位于类变量_validators
中,您可以调用skip_callback
取消它。
所以你应该能够用
validators = Abc._validators[:something]
v = validators.first
validators.delete v
filter = Abc._validate_callbacks.find { |c| c.raw_filter == v }.filter
skip_callback :validate, filter