selase
(Selase Krakani)
17. Februar 2025 um 16:22
125
SubStrider:
Im Migrationsskript sehe ich, dass doppelte E-Mails nicht importiert werden. Auf welche verschiedenen Arten wird ein Duplikat bestimmt? Mir ist aufgefallen, dass xyz@gmail.com gleich behandelt wird wie xyz+1@gmail.com und xy.z@gmail.com
Gibt es noch andere Muster?
Das ist so ziemlich alles. Die Prüfung auf Eindeutigkeit wird für die kleingeschriebene und normalisierte Version der angegebenen E-Mail-Adresse durchgeführt.
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
Wir normalisieren, indem wir alle Punkte entfernen und alles nach dem + im Benutzernamen ignorieren.
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 „Gefällt mir“