Disons que j'ai http://www.mysite.com/I-Like-Cheeseburgers et je veux qu'il pointe vers l'élément avec l'id 3. Quelque temps plus tard, je change le nom de l'élément, et maintenant son http://www.mysite.com/I-Like-Hamburgers (et peut-être bien d'autres fois). Je veux que toutes ces URL continuent de pointer vers l'élément 3. Est-il efficace de simplement conserver une table de [strings,item_ids] et d'y effectuer une recherche ? Existe-t-il une meilleure solution ?
Réponses
Trop de publicités?Ou vous pouvez faire comme stackoverflow.com
http://stackoverflow.com/questions/2887068/seo-friendly-urls-where-the-phrase-used-may-change-in-rails
Vous conservez l'identifiant de la question (2887068) dans le lien, dont la partie texte peut être modifiée et qui aboutit toujours à la même page. http://stackoverflow.com/questions/2887068/whatever-you-put
o http://stackoverflow.com/questions/2887068/
vous renverra à la même page.
Donc, pour votre exemple, ce serait :
http://www.mysite.com/items/3/I-Like-Cheeseburgers
Vous pouvez également utiliser le plugin friendly_id .
Avec :use_slug
Cette option permet de conserver l'historique des permaliens et de proposer des solutions pour rediriger vers l'URL actuelle, etc.
class YourModel < ActiveRecord::Base
has_friendly_id :title, :use_slug => true
end
Voir documentation pour plus.
Dans votre modèle, faites
class Article < AR::Base
def to_param
"#{id}-#{name.parameterize}"
end
end
Vos liens ressembleront à ceci : http://mysite.com/articles/3-i-like-cheeseburgers
Lorsque vous essayez de récupérer l'objet, en faisant Article.find(params[:id])
convertirait automatiquement le "3-i-like-cheeseburgers" en un nombre entier et récupérerait l'objet correct. Cela permet de changer le nom, tout en maintenant le lien vers le même objet article.