2010-11-18 5 views
1

Ich möchte Benutzer mit ihren registrierten Benutzernamen zu ihren Profilen verlinken lassen.Wie handhabe ich Groß- und Kleinbuchstaben in einer benutzerdefinierten URL?

Ich speicher ihren Benutzernamen genau wie sie es geben.

Ich habe meine Routen eingerichtet, um// name und dann find_by_name zu finden, um es zu bekommen. Das Problem, das ich habe, ist, wenn Sie example.com/username eingeben, funktioniert der Name nicht: Benutzername. (Beachten Sie die Groß-/Kleinschreibung Unterschied)

Also meine Frage ist, wie kann ich Groß-/Kleinschreibung in URLs ignorieren?

+0

Sind Sie wirklich sicher, dass Sie dies tun wollen? Also wenn ich mich als BobKaufman registriere, wird es mich nicht erkennen, wenn ich "bobkaufman" eingebe? Denken Sie daran, dass die Groß-/Kleinschreibung bei Kennwörtern eine ganz andere Sache ist. –

+0

Nein, das ist was ich will. Ich möchte, dass es jede Version von "Bobkaufman" erkennt. So könnte es "BobKaufman", "Bobkaufman", "BobKaufmAn" usw. sein. –

+1

Danke für die Klarstellung. Ich würde immer Benutzernamen (Lower) vor dem Lesen/Schreiben von URLs. –

Antwort

3

Sie können die username downcased zusammen mit einer display_name speichern, die in dem Format ist, das sie Ihnen gab. Dann downcase jede Eingabe und passen Sie es mit username und nur display_name verwenden für, na ja, Anzeige :)

Wenn Sie wollten, könnten Sie sogar zu /DisPlAyName von /username umleiten, nachdem Sie den Datensatz suchen.

0

Eine Möglichkeit, dies zu tun, besteht darin, eine Kleinbuchstabenversion ihres Benutzernamens zu speichern. Als sie eintippen

example.com/UsErNaMe oder example.com/Username

es downcase und in die Kleinversion in der Datenbank übereinstimmen.

--- ODER ---

einfach den Benutzer haben überall einen Kleinbenutzernamen machen. (Downcase es, wenn seine gemacht)

--- ODER ---

haben einen konstanten Art von Benutzernamen ein. Also immer den ersten Buchstaben groß schreiben oder so. Speichern Sie es als Kleinbuchstaben und stellen Sie den ersten Buchstaben jedes Mal auf, wenn Sie es zeigen.

3

Der einfachste Weg ist, den Benutzernamen in der Datenbank und in Rails in den unteren (oder oberen) Fall zu konvertieren, wenn Sie den Vergleich durchführen.

User.where('lower(username) = ?', params[:name].downcase).first 

Oder wenn Sie noch Schienen verwenden 2:

User.find(:first, :conditions => ['lower(username) = ?', params[:name].downcase]) 
Verwandte Themen