2010-11-18 25 views
1

Je souhaite que les utilisateurs disposent de liens vers leurs profils à l'aide de leurs noms d'utilisateur enregistrés. Je stocke leur nom d'utilisateur exactement comment ils le donnent.Comment gérer les caractères majuscules et minuscules dans une URL personnalisée?

J'ai configuré mes routes pour correspondre à /: nom, puis j'ai utilisé find_by_name pour l'obtenir. Le problème que j'ai est quand vous tapez example.com/username cela ne fonctionne pas le nom: Username. (Notez la différence majuscule/minuscule)

Donc, ma question est comment puis-je ignorer la casse dans les URL?

+0

Etes-vous vraiment sûr que vous voulez faire? Donc, si je m'inscris comme BobKaufman, il ne me reconnaîtra pas si j'entre "bobkaufman"? Gardez à l'esprit que la sensibilité à la casse sur les mots de passe est une question entièrement différente. –

+0

Non, c'est ce que je veux. Je veux qu'il reconnaisse n'importe quelle version de "bobkaufman". Donc, il pourrait être "BobKaufman", "BOBKaufman", "BobKaufmAn" etc. –

+1

Merci pour la clarification. Je devrais toujours utiliser les noms d'utilisateur() avant de lire/écrire des URL. –

Répondre

3

Vous pouvez stocker le username avec un display_name qui est dans le format qu'il vous a donné. Ensuite, downcase toute entrée et correspondre avec username et utiliser uniquement display_name pour une fois que vous regardez le dossier, bien, écran :)

Si vous vouliez, vous pourriez même rediriger vers /DisPlAyName de /username.

0

Une façon de procéder consiste à stocker une version en minuscule de leur nom d'utilisateur. Quand ils tapent dans

example.com/UsErNaMe ou example.com/Username

downcase et correspondent à la version minuscule dans la base de données.

--- OU ---

Assurez l'utilisateur ont un nom d'utilisateur minuscules partout. (Downcase quand son fait)

--- OU ---

ont un type constant de nom d'utilisateur. Donc toujours avoir la première lettre en majuscule ou quelque chose. Rangez-le en minuscules et placez la première lettre chaque fois que vous l'affichez.

3

Le moyen le plus simple est de convertir le nom d'utilisateur dans la base de données et dans les rails pour les cas inférieurs (ou supérieurs) lorsque vous faites la comparaison.

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

Ou si vous utilisez toujours des rails 2:

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