Mongoid:加载ActiveModel Numericality验证,allow_nil不起作用

2019-09-28 17:27发布

我定义了一个整型字段Mongoid模型 ,我验证numericality这样

# source.rb
class Source
 field :code, type: Integer
 validates_numericality_of :code, allow_nil: true

allow_nil的目的是要验证的存在&忽略零值的字段。

但在这里,allow_nil完全绕过numericality检查

object = Source.new
object.code = "ABC"
object.valid?
=> true
object
=> #<Source _id: 50d00b2d81ee9eae46000001, _type: nil, code: 0> 

在ActiveRecord的,这个工作正常

object = Source.new
object.code = "ABC"
object.valid?
=> false
object
=> #<Source id: nil, code: 0, created_at: nil, updated_at: nil>
object.save
(0.1ms)  begin transaction
(0.1ms)  rollback transaction
 => false

Answer 1:

Mongoid使用#valid时行为与活动记录略有不同? 对已保留的数据。 活动记录的#valid? 将运行所有验证,而Mongoid的#valid? 只能在其中的数据已经改变作为优化领域运行验证。 - 看到mongoid验证

所以这可能是你的问题。

你可以尝试

validates_numericality_of :code, :allow_nil => true

validates :code, :numericality => true ,:allow_nil => true



文章来源: Mongoid: ActiveModel Numericality Validation, allow_nil does not work