1
我已经定义了一个Mongoid模型与整型字段,我验证numericality这样Mongoid:加载ActiveModel Numericality验证,allow_nil不起作用
# 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
嗨。感谢您的回复。我不确定我是否理解正确。在上面的代码片段中,这两个示例都是新对象。没有真正更新属性。另外,如果你检查第一行,我使用validates_numercality_of,类似于你的第一个建议。 – Rahul
通过它的外观你试图设置'Source.code =“ABC”'这实际上不会改变'code:0'已经持久化的默认值作为它的'type!= Integer'所以Mongoid将不会在该字段上运行验证。根据我对Mongoid验证的解释 –
是的,有趣的是ActiveRecord按照我的代码片段演示。我将如何让Mongoid失败验证? – Rahul