Могу ли я проверить валидации ActiveRecord без сопоставления строк? - PullRequest
0 голосов
/ 19 января 2011

Короче говоря, я хочу, чтобы форма регистрации пользователя делала что-то особенное, если адрес электронной почты уже есть в системе, но в противном случае используйте обычную обработку ошибок.Проверки в модели уже выполняют работу по выяснению этого, поэтому в контроллере я бы хотел просто проверить, не является ли электронная почта неуникальной.Проблема в том, что, похоже, единственный способ использовать эту работу - сопоставить ее с определенной строкой, например,

ruby-1.9.2-head :022 > user.valid?
=> false 
ruby-1.9.2-head :023 > user.errors
=> {:email=>["has already been taken"], :password=>["can't be blank"]} 
ruby-1.9.2-head :037 > user.errors[:email].include? "has already been taken"
=> true 

, и это кажется ужасным и хрупким.Я что-то пропустил?Есть ли способ проверить, является ли модель недействительной из-за уникальности без сопоставления строк?Я мог бы достаточно легко проверить систему на наличие дубликатов электронных писем, но это кажется пустой тратой, когда проверка уже предоставляет эту информацию.

1 Ответ

1 голос
/ 20 января 2011

Насколько я знаю, нет простого решения вашей проблемы.

Помимо сопоставления строк и проверки базы данных на наличие существующих записей, единственное, о чем я могу думать, это устранить все другие возможные ошибки.

Например, Devise проверяет наличие и уникальность адреса электронной почты. Если вы можете проверить, является ли user.email.present?, вы можете устранить эту проблему. Если эти две проверки (наличие и уникальность) являются единственными двумя проверками адреса электронной почты, вы будете знать, что проверка не удалась из-за уникальности.

Теперь, конечно, Devise также проверяет электронную почту, чтобы убедиться, что это действительный адрес электронной почты, что означает, что вам придется исключить как наличие, так и формат электронной почты, прежде чем вы сможете с уверенностью сделать вывод, что уникальность является провальным фактором .

В общем, ваша самая безопасная ставка, вероятно, будет снова проверять базу данных. Ваша самая простая опция - сопоставление строк. Единственное, за что вам следует следить, - это изменение сообщения об ошибке по умолчанию в более поздних версиях Rails.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...