Как заглавные буквы попали в электронные письма пользователей?

#ruby-on-rails #validation #ruby-on-rails-4 #before-save

#ruby-on-rails #проверка #ruby-on-rails-4 #перед сохранением

Вопрос:

У меня есть следующий код в моем приложении Rails 4.1:

  #user.rb
with_options unless: :special_without_email? do |u|
    u.before_save { |user| user.email = email.downcase }
end
 

Это гарантирует, что электронная почта пользователя преобразуется в нижний регистр перед сохранением. Это работает во всех случаях, когда я его тестировал. Тем не менее, каким-то образом некоторым пользователям (которые не являются special_without_email) удалось сохранить свои электронные письма с заглавными буквами в них. Что может быть причиной этого?

(Это вызывает ошибки, когда я выполняю проверку, User.find_by(email: ) и он не находит электронное письмо, но также не может сохранить новую учетную запись.)

Комментарии:

1. Вероятно special_without_email , сначала для атрибута было установлено значение true, а затем пользователь добавил электронное письмо, следовательно, прошел эту проверку.

2. Был ли этот метод ретроактивным? Я имею в виду, могут ли это быть уже существующие записи, созданные / обновленные до того, как вы настроили этот обратный вызов?

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

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