Проверка зашифрованных данных

Я шифрую все личные данные пользователей перед сохранением в базе данных с помощью драгоценного камня «attr_encrypted». Например, у меня есть таблица «email_addresses», которая содержит столбец «encrypted_email». Этот драгоценный камень расшифровывает данные, когда я вызываю object.email или когда я ищу по электронной почте. Но у меня проблемы с проверкой этого столбца.

У меня есть следующие проверки для этой и других таблиц:

validates_length_of :email, :within => 3..100
validates_numericality_of :post_code

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


person Sergei Struk    schedule 07.08.2014    source источник


Ответы (1)


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

validates :decrypted_email, length: { within: 3..100 }

def decrypted_email
  # decrypt email here
end
person jvnill    schedule 07.08.2014
comment
К сожалению, это решение работает не для всех типов проверок. Например, validates_uniqueness_of проверяет, включено ли имя переданного метода в column_hash (т.е. в соответствующую таблицу базы данных) и вызывает исключение, если метод отсутствует. - person Sergei Struk; 20.08.2014