mongoid:ActiveModel数值验证,允许_NIL不起作用



我已经用一个整数字段定义了 mongoid模型我验证了这样的数值

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

允许_nil的目的是验证存在的字段&忽略零值。

但在这里,允许_nil完全绕过数值检查

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

使用#VALID时的活动记录略有不同?在已经持久的数据上。Active Record的#VALID?将运行所有验证,而杂种的#VALID?仅在数据变化作为优化的字段上运行验证。 - 请参见杂种验证

,这可能是您的问题。

您可以尝试

validates_numericality_of :code, :allow_nil => true

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

相关内容

  • 没有找到相关文章

最新更新