2017-02-21 3 views
0

Railsでは、情報を検証するために、検証またはデータベースの制限を使用できます。Railsでは、データベースの制限ではなく、いつ検証を使用するべきですか?

すなわち:

移行:モデルから

t.string "name", :limit => 25 

検証:

validates_length_of :name, :maximum => 25 

私は検証が提出からフォームを防ぎ、マイグレーション/データベースの制限省からデータを防止するであろうことを理解データベースに格納します。しかし、奇妙なことに、検証やデータベースの制限を使用する場合、または両方を同時に使用する必要がある場合は、

+3

これは異なる意見を持っていますが、私は可能な限り常に両方を行います。 – Iceman

+2

私はバリデーションが柔軟性を高め、エラーメッセージを処理するのがより簡単で、より簡単であると考えています。また、入力がユーザーから来ている場合は優先されるかもしれません。どちらもあなたのDBに入力されないことを確認するので、どちらも安全です。 –

+0

@KcUS_unico複数のスレッド/プロセスがアプリケーションを実行しているときに、モデルの一意性検証が実際にDBの一意性を保証するわけではないことに注意してください。 –

答えて

2

検証は高速ですデータが有効であるかどうかを知る前に、それらが一意であることを確認してください。検証の欠点は、一意性の検証があっても、データベースの一意性を100%保証できないということです。これは、2つのスレッドが一意性をチェックし、同時に両方のレコードをデータベースに追加して一意性チェックに失敗するためです。このため、データベース内では常に一意性の検証を指定する必要があります(他のスレッドが存在をチェックしたが直ちに新しい関連レコードを挿入していない場合は、 。その他の書式/長さ/その他のバリデーションは、モデル上で指定できます。モデルの更新/変更が容易です。

1

データベースレベルで制限を使用すると、発生したことをいつ知るのが難しいでしょうか。それを検証に追加すると、そのモデルではクリアされます。変更するのが簡単で、すべての開発者にとって何が何であるかが明確です。彼らは必ずしもデータベースへのラウンドトリップを必要としないので、

今まで私はそれを使用し、私ができる場合

をデータベース制限を回避することができたときに私はこのことができますことを願って検証を好き:)

関連する問題