2016-06-21 2 views
1

Я знаю, что проверка путем создания индекса является надежной, по сравнению с добавлением ключевого слова «уникальность» модели.Валидация с уникальностью и индексом

Есть ли ценность, имеющая как индекс, так и «уникальность». Или это будет плохая идея?

user.rb:

validates :email, uniqueness: true 

schema.rb

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

Я не совсем понимаю, о чем вы спрашиваете. Можете ли вы объяснить более подробно и, возможно, опубликовать некоторый код, относящийся к тому, что вы спрашиваете? –

+0

Конечно, я просто добавил пример кода. В основном я описал два подхода к проверке уникальности. Мой вопрос: есть ли какая-либо польза в использовании обоих подходов. – user1175969

ответ

2

Да, есть значение в обоих подходах, и вы хотите использовать оба. Также валидация и индекс имеют разные цели.

Добавляя индекс в базу данных, сначала повышайте производительность, а во-вторых, убедитесь, что на очень низком уровне (даже если кто-то пытается заставить дублировать) вы гарантировали наличие уникальных данных. Он не перестает проверять уникальность. Ваше приложение будет генерировать исключение, если вы попытаетесь вставить дубликат.

Добавление уникальности в проверки означает, что если вы хотите сохранить или обновить что-то недействительное, Rails поймает это и покажет сообщение об ошибке (без исключений). Вы всегда можете пропускать проверки Rails, сохраняя с аргументом validate: false, но вы никогда не сможете избежать уникальности на уровне базы данных.

+0

Отлично. Благодаря! Вы знаете, как я могу проверить уникальность для пары столбцов (без использования индексов)? Чтобы я мог поймать ошибку и показать сообщение об ошибке ... – user1175969

+1

Да, подтвердите с помощью области. Подробнее здесь: http://stackoverflow.com/questions/4870961/rails-validate-uniqueness-of-multiple-columns –

Смежные вопросы