2016-06-21 4 views
1

インデックスを作成して検証することは、「一意性」キーワードをモデルに追加するのと比較して確実です。一意性とインデックスの両方を使用した検証

インデックスと「一意性」の両方を持つ価値がありますか?それとも悪い考えですか?

user.rb:

validates :email, uniqueness: true 

schema.rb

add_index "users", ["email"], name: "index_users_on_email", unique: true 
+0

私は本当にあなたが何を求めているのか分かりません。もう少し詳しく説明し、あなたが求めているものに関連するコードを投稿することはできますか? –

+0

もちろん、サンプルコードを追加しました。私は基本的に唯一性を検証するために2つのアプローチを説明しました。私の質問は、両方のアプローチを使用することに利点があるということです。 – user1175969

答えて

2

はい、両方のアプローチで価値があり、あなたは両方を使用します。また、検証とインデックスは異なる目的を持っています。

データベースにインデックスを追加することで、まずパフォーマンスを向上させ、2番目に非常に低いレベル(重複を強制している場合でも)で一意のデータを持つことを保証します。一意性の検証を終了しません。あなたのアプリは重複を挿入しようとすると例外をスローします。

バリデーションで一意性を追加すると、無効なものを保存/更新する場合、Railsはそれを捕捉してエラーメッセージを表示します(例外はありません)。 validate: false引数で保存することで、Rails検証をスキップすることはできますが、データベースレベルでの一意性を避けることはできません。

+0

素晴らしい。ありがとう!インデックスを使用せずに列のペアの一意性をどのように検証できるか知っていますか? エラーをキャッチしてエラーメッセージを表示できるように... – user1175969

+1

はい、有効範囲はスコープです。詳細はこちら:http://stackoverflow.com/questions/4870961/rails-validate-uniqueness-of-multiple-columns –

関連する問題