在任何给定的型号上:
class MyTestModel
include Mongoid::Document
include Mongoid::Timestamps
field :my_field
validates : my_field, inclusion: { in: proc { |my_instance| [ my_instance.some_stuf ] } }
def some_stuff
'some generated value'
end
end
如果my_field不包含'some generated value'
但是错误验证并不是非常明确的,我觉得我在这里没有充分理由使用包含。我想为验证写的是:
validates : my_field, acceptance: { accept: proc { |my_instance| my_instance.some_stuf } }
但这会 从不 通过验证吗?而且我还没有找到一种方法来查看验证所期望的值以检查错误。知道为什么一个工作而不是另一个?这是一个mongoid bug吗?
答案 0 :(得分:0)
为什么不编写自定义验证器方法。然后它清楚你正在做什么 - 而不是有多层模糊过程。
validate :my_field_in_some_stuff
def my_field_in_some_stuff
errors.add(:my_field, "my field must... but it wasn't") unless ['some generated value'].include?(self.my_field)
end
或者如果some_stuff方法在其他地方使用
validate :my_field_in_some_stuff
def my_field_in_some_stuff
errors.add(:my_field, "my field must... but it wasn't") unless some_stuff.include?(self.my_field)
end
def some_stuff
'some generated value'
end