1

このように数値を検証する整数フィールドを持つ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> 

アクティブレコードでは、これは正しく機能します

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 に答える