Pull to refresh

Comments 5

Ничего не написано про механизм работы и про требования к уровню изоляции транзакций в БД.
Для PostgreSQL есть citext и unique index, это 0 стороннего кода и все из коробки. Как и генерация хешей паролей с crypt и куча всего ещё, что на порядок более консистентнее, чем такой же код на ruby, который пытается угодить всем базам. Почему не доверить консистентность ПО, которое на этом специализируется?

Данный gem как раз использует родной unique index, и перехватывает ошибку от БД, трансформируя её в ошибку валидации, которую можно показать пользователю.


Как пишет автор, в противном случае бы пользователь увидел страницу HTTP 500.

Не совсем 500, смотря как написано, достаточно перехватывать ActiveRecord::RecordNotUnique.

Можно перехватить, но информацию о том, какое поле вызвало такое исключение, придётся парсить из примерно вот такой строки:


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 вы и не заметите.

Sign up to leave a comment.

Articles