Rails Validators -クイックガイドとシート

9811 ワード

レールの複雑な世界では、正確に検証とどのように我々はそれらを使用できますか?このブログでは、Railsバリデータの概要を示し、いくつかの一般的で便利な例を示します.The Rails Guides 「妥当性のあるデータのみがデータベースに保存されるように検証を使用します.愚かなアナロジーとして、すべてのデータが適切にクラブデータベースを入力する前に服装されていることを確認、バックエンドの用心棒に検証を考慮することができます.“モデルレベルの検証は、有効なデータのみがデータベースに保存されるようにする最良の方法です.”クライアント側の妥当性検査が可能ですが、単独で使用するときに安全でないか非効率である場合もあります.バックエンドの検証は、データベースが安全かつ適切なデータを受信していることを確認します.

何が検証を引き起こすのか


どんな種類の変更がデータベースにもされるとき、妥当性検査は実装されます.あなたが最も頻繁にあなたに.save or .create , しかし、手動で妥当性検査をトリガすることもできます.valid? or .invalid? . また、妥当な検査方法が組み込まれていますon: これにより、妥当性検査が起動されるときに判断できます.
class User < ApplicationRecord
  validates :age, numericality: true, on: :update
end

一般的な組み込み検証メソッド


アクティブレコードには、一般的な検証のために使用できる多数の組み込み検証メソッドがあります.これらの妥当性検査が失敗するたびに、彼らはあなた自身の方法で処理することを決定することができますエラーをトリガします.最も一般的な組み込みバリデータの1つですpresence: は、ある値が入力/存在しているかどうかを調べます.
class User < ApplicationRecord
  validates :username, presence: true
end
注意:同じ型の検証を必要とする場合、属性を一緒にチェインすることもできます.
class User < ApplicationRecord
  validates :username, :birthday, :full_name, presence: true
end
presence: 他の妥当性検査がない場合に最適です.同じ属性の代わりに別の検証を行う場合はpresence: は暗黙のうちになり、必須ではない.
別の一般的な組み込み検証length: , これには、さまざまな長さの制約があります.
class User < ApplicationRecord
  validates :name, length: { minimum: 2 }
  validates :bio, length: { maximum: 500 }
  validates :password, length: { in: 6..20 }
  validates :drivers_license, length: { is: 9 }
end
The length: バリデータは、最大、最小、正確な長さ、または範囲などの多数の異なる制約に対して使用することができます.numericality: は属性の数値を検証するために使用されます.
class User < ApplicationRecord
  validates :birthday, numericality: true
  validates :phone_number, numericality: { only_integer: true }
end
がたくさんあるnumericality: 制約:greater_than , :greater_than_or_equal_to , :equal_to , :less_than , :less_than_or_equal_to , :other_than , :in (範囲指定):odd , :even . これらのバリデータは、広い範囲の目的に使用でき、使いやすさのために直感的に命名されます.inclusion: 別の有用なバリデータは、特定の値が含まれていることを確認できます.ユーザーが選択するオプションのリストを提供している場合、これは有用です.
class User < ApplicationRecord
  validates :eye_color, inclusion: ["brown", "blue", "hazel", "green", "grey"]
end
もう一つの非常に一般的なバリデータuniqueness: , これは、ユーザー名やメールなどのデータが特定のユーザーに完全に一意であることを保証するために重要です.
class User < ApplicationRecord
  validates :username, uniqueness: true
end
いくつかの興味深い検証があります:allow_blank and :allow_nil , これらの検証は、バイパスする方法で使用されますpresence: true 情報が入力されている場合は、それを検証することができますが、それも空白またはnilのままにすることができます.
class User < ApplicationRecord
  validates :bio, length: { minimum: 250 }, allow_blank: true
end
また、特定の条件が満たされた場合にのみトリガされる条件付き検証を実装することもできます.
class Order < ApplicationRecord
  validates :card_number, presence: true, if: :paid_with_card?

  def paid_with_card?
    payment_type == "card"
  end
end
また、特定のスコープ内で検証を含めることもできます.
class Gate < ApplicationRecord
  validates :gate_num, uniqueness: { scope: :terminal }
end

カスタム検証


しかしながら、これらが十分でないとき、我々には我々自身のカスタムValidationを構築する能力があります.構文は以下の通りです.
class CustomValidator < ActiveModel::Validator
  def validate(record)
    unless record.species == 'dog' 
      record.errors.add :species, "Dogs only!"
    end
  end
end
カスタムバリデーションを使用した一般的な構文gotchaは、カスタムの検証を使用することですvalidate むしろvalidates . ときは、無数の組み込みメソッドを使用して独自のカスタム検証を組み合わせると、あなたの検証可能性はほぼ無限大です!

エラー処理


Railsを処理する方法は、Railsが複数のオプションを提供しているので、このブログの範囲を超えた大きなトピックです.しかし、私はビルトインをハイライトしたいですmessage: あなたの検証に直接組み込まれます.
class User < ApplicationRecord
  validates :username, presence: { message: "must be given please" }
end

結論


Railsの妥当性検査は、データベースに適切かつ安全なデータを許可することを保証する、シンプルで効果的な方法です.あなたの最も一般的な検証のニーズのための多数のビルトインバリデータメソッドから選択することができますか、ユニークなニーズのためにあなたの創造的な自由とデザインのカスタム検証を使用することができます.

ソース


Ruby on Rails Guides