selase
(Selase Krakani)
17 Febrero, 2025 16:22
125
SubStrider:
En el script de migración veo que los correos electrónicos duplicados no se importan. ¿Cuáles son las diferentes formas en que se determina un duplicado? Noté que xyz@gmail.com se trata igual que xyz+1@gmail.com y xy.z@gmail.com
¿Hay algún otro patrón además de este?
Eso es prácticamente todo. La comprobación de unicidad se realiza en la versión normalizada y en minúsculas de la dirección de correo electrónico proporcionada.
def unique_email
email_exists =
if self.normalize_emails?
self
.class
.where("lower(email) = ? OR lower(normalized_email) = ?", email, normalized_email)
.exists?
else
self.class.where("lower(email) = ?", email).exists?
end
self.errors.add(:email, :taken) if email_exists
end
Normalizamos eliminando todos los puntos e ignorando todo lo que sigue a + en el nombre de usuario.
def normalize_email
self.normalized_email =
if self.email.present?
username, domain = self.email.split("@", 2)
username = username.gsub(".", "").gsub(/\+.*/, "")
"#{username}@#{domain}"
end
end
3 Me gusta