1
1

Railsガイド +α メモず 【バリデーション】

Posted at

はじめに

Active Record バリデーションを読んでわからなかったこと、メモです。

気になった見出しがあればご覧ください。

メモず

バリデーションの種類

モデルレベルでのバリデーション

Railsの基本的なバリデーション

データベース制約

メリット:複数のプログラミング言語を使用するプロジェクトであれば、大元であるデータベースレベルでバリデーションをすることは理にかなう。
デメリット:バリデーションのテストはアプリケーションと分離して行わねばならず、保守も困難になる可能性がある。

ストアドプロシージャ

SQL文をまとめて保存し、関数のように名前で呼び出す。
データベース制約の一種

クライアント側でのバリデーション

メリット:扱いやすい
デメリット:ユーザーによってバリデーションを変更されてしまうリスクがある。

コントローラレベルのバリデーション

メリット:手軽
デメリット:再利用性が低い、一貫性が欠如する、全体に散らばっているため維持・更新が困難。パフォーマンスのボトルネックになる、テストが複雑化する。

バリデーションをスキップするケース

以下のように、バリデーションをスキップするメソッドは大量にある。

バリデーションをスキップするなんてあるのか・・・?

バリデーションをスキップするメソッド

  • decrement!
  • decrement_counter
  • increment!
  • increment_counter
  • insert
  • insert!
  • insert_all
  • insert_all!
  • toggle!
  • touch
  • touch_all
  • update_all
  • update_attribute
  • update_column
  • update_columns
  • update_counters
  • upsert
  • upsert_all

例:ランダム生成された大量のテストデータ

大量のデータに、すべてバリデーションを適用することは時間コストがかかる。
同じコードで生成されたテストデータの場合、最初のいくつかを検証し、他はバリデーションをスキップすることで効率的にテストが行える。

例:管理者による操作

バリデーションは負荷がかかり、時間もかかる。そのため、正しいことが保証されるならバリデーションをスキップするのは合理的。

例:内部システム間のデータ交換

例:データの同期

例:リアルタイム処理・ストリーミングデータ

バリデーションによる負荷を嫌い、バリデーションを省略・簡略化することがある。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1