1

我已经定义了一个带有 Integer 字段的Mongoid 模型,我像这样验证数值

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

allow_nil 的目的是验证存在的字段并忽略 nil 值。

但是在这里,allow_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
4

1 回答 1

0

使用#valid 时,Mongoid 的行为与 Active Record 略有不同?在已经持久化的数据上。Active Record 的#valid?将运行所有验证,而 Mongoid 的 #valid? 将仅在数据已更改的字段上运行验证作为优化。-见 mongoid 验证

所以这可能是你的问题。

你可以试试

validates_numericality_of :code, :allow_nil => true

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

于 2013-01-14T03:49:49.033 回答