Faut-il mettre à jour la gem qui gère la production du slug et/OU le routage suivant le slug ? Changer la règle de production du slug (même si on change la production de slug pour ajouter XXX123 quand on ouvre le compte id 123, on aura toujours une collision si on ouvre un compte login XXX123 de toute façon...) ?
Alors la documentation de friendly_id stipule clairement qu'elle ne gère que la partie base de donnée. Le routage est géré manuellement.
Avec LinuxFr, par exemple pour le controlleur de user, c'est géré comme ça:
Depuis le paramètre id qui vient du path de l'url (/users/:id), on cherche l'utilisateur qui correspond avec User.find (id peut être soit un slug, soit un l'identifiant numérique de l'utilisateur).
Si le path de l'utilisateur trouvé ne correspond pas au path courant, alors on redirige. Je ne connais pas assez Ruby On Rails pour savoir comment est géré la fonction user_path, mais j’admets qu'elle fonctionne correctement.
La gem friendly_idmodifie la fonction find (parce que l'addon :finders est activé dans friendly_id.rb):
FriendlyId offers enhanced finders which will search for your record by friendly id, and fall back to the numeric id if necessary.
C'est pour ça que l'utilisateur avec un slug numérique aura la priorité sur l'utilisateur qui a l'identifiant qui correspond au slug.
# Comment friendly_id semble fonctionner
Posté par Adrien Dorsaz (site web personnel, Mastodon) . En réponse à l’entrée du suivi Slug purement numérique pour un compte utilisateur et effet sur le routage. Évalué à 3 (+0/-0).
Alors la documentation de friendly_id stipule clairement qu'elle ne gère que la partie base de donnée. Le routage est géré manuellement.
Avec LinuxFr, par exemple pour le controlleur de user, c'est géré comme ça:
Depuis le paramètre
idqui vient du path de l'url (/users/:id), on cherche l'utilisateur qui correspond avecUser.find(idpeut être soit un slug, soit un l'identifiant numérique de l'utilisateur).Si le path de l'utilisateur trouvé ne correspond pas au path courant, alors on redirige. Je ne connais pas assez Ruby On Rails pour savoir comment est géré la fonction
user_path, mais j’admets qu'elle fonctionne correctement.La gem
friendly_idmodifie la fonctionfind(parce que l'addon:findersest activé dansfriendly_id.rb):C'est pour ça que l'utilisateur avec un slug numérique aura la priorité sur l'utilisateur qui a l'identifiant qui correspond au slug.