Mongoid验证:使用Proc(或lambda)验收不起作用?但使用包含确实有效

时间:2014-06-30 22:48:40

标签: ruby-on-rails validation mongoid proc

在任何给定的型号上:

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吗?

1 个答案:

答案 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