検証
Mongoid には、基本的な検証に加えて、追加の関連 および 一意性バリデーターを提供するための ActiveModel::Validations
が含まれています。
アクティブなレコード検証 を参照 Rails ガイドと ActiveModel::Validation 詳細については、ドキュメントを参照してください。
すでに保存されているデータで#valid?
を使用する場合、Mongoid は ActiveRecord とは若干異なる動作をします。 ActiveRecord の#valid?
はすべての検証を実行しますが、Mongoid の#valid?
は最適化としてメモリにあるドキュメントの検証のみを実行します。
validates_uniqueness_of
と:conditions
オプション
validates_uniqueness_of
に対する:conditions
オプションは、同一のドキュメントを検索するデータベース クエリに追加する追加の条件を提供するために使用できます。 このオプションは検証が実行されるタイミングに影響しないため、Mongoid がモデルからそれぞれのフィールドの現在の値を取得するときに考慮されないためです。 次の例で考えてみましょう。
class Band include Mongoid::Document field :name, type: String field :year, type: Integer validates_uniqueness_of :name, conditions: -> { where(:year.gte => 2000) } end # OK Band.create!(name: "Sun Project", year: 2000) # Fails validation because there is a band with the "Sun Project" name # and year 2000 in the database, even though the model being created now # does not have a year. Band.create!(name: "Sun Project")
読み込み設定(read preference) validates_uniqueness_of
属性の一意性を検証するために、Mongoid はその属性の値がデータベース内にまだ存在しないことを確認する必要があります。 Mongoid がレプリカセットのセカンダリ ノードをクエリする場合、古いデータが読み取られている可能性があります。 このため、 validates_uniqueness_of
検証をチェックするために使用されるクエリでは、常に読み込み設定(read preference primary
が使用されます。