Comments 5
Ничего не написано про механизм работы и про требования к уровню изоляции транзакций в БД.
+1
Для PostgreSQL есть citext и unique index, это 0 стороннего кода и все из коробки. Как и генерация хешей паролей с crypt и куча всего ещё, что на порядок более консистентнее, чем такой же код на ruby, который пытается угодить всем базам. Почему не доверить консистентность ПО, которое на этом специализируется?
0
Данный gem как раз использует родной unique index, и перехватывает ошибку от БД, трансформируя её в ошибку валидации, которую можно показать пользователю.
Как пишет автор, в противном случае бы пользователь увидел страницу HTTP 500.
0
Не совсем 500, смотря как написано, достаточно перехватывать ActiveRecord::RecordNotUnique.
0
Можно перехватить, но информацию о том, какое поле вызвало такое исключение, придётся парсить из примерно вот такой строки:
ERROR: duplicate key value violates unique constraint "index_users_on_email" DETAIL: Key (email)=(hello@example.com) already exists.
database_validations
делает это за вас, причём прозрачно, так, что разницы между validates_db_uniqueness_of
и validates_uniqueness_of
вы и не заметите.
0
Sign up to leave a comment.
Настоящая валидация на уникальность