Display IDs in your URLs can be terrible and wasteful for SEO. In this blog entry, I will demonstrate to you how you can utilize slugs to make your URLs more relevant to the page content. In the first place, we will utilize an implicit arrangement (superseding the to_param strategy) to change the URLs and a while later, we will utilize a gem called friendly_id to produce slugs and keep up a past filled with these slugs. So that search engines index your web pages.
For example: http://www.exaple.com/blogs/1 à http://www.exaple.com/blogs/blog-name
Ici, je crée un échantillon Rails5 application avec modèle de publication pour illustrer exactement comment cela va fonctionner avec les jolies URL.
titre du message d'échafaudage Rails G : chaîne publiée : booléen
courir base de données rails: migrer
et créez quelques exemples de publications (http://localhost:3000/posts/new)
app/models/post.rb
def to_param title.parameterize end
All the links will be changed to pretty URLs once you add the above method to your model. Please check on index page where it lists all the posts. However, when you click on that it will show you error page.
Post.find method cannot find the record with id which we are passing in URL. We need to create slugs for the above posts in our db for that model.
Let’s add migration file for the slug
rails g migration AddSlugToPosts slug: chaîne
Ouvrez le fichier de migration mentionné ci-dessus et ajoutez un index uniq à ce sulg. Slug doit être unique.
class AddSlugToPosts < ActiveRecord::Migration[5.0] def change add_column :posts, :slug, :string add_index :posts, :slug, unique : true end end
courir base de données: migrer
Now, we have to change our show action db query to find_by instead of find method. Because we need to fetch the results based on slug.
Change our set_post method to
def set_post Post.find_by_slug(params[:id]) fin
Maintenant, cela fonctionne comme prévu avec les jolies URL. Que se passe-t-il si deux enregistrements ont la même URL puisque ces deux enregistrements portent le même nom. Parce que .find_by récupère toujours le premier enregistrement. Pour résoudre ce problème, avant de sauvegarder le slug, nous pouvons combiner l'identifiant de l'enregistrement avec le slug de la manière mentionnée ci-dessous :
def add_slug "#{id}-#{title.parameterize}" fin
So, it will generate like “1-blog-name”. We have a gem called friendly_gem to simply take care of all the above-mentioned scenarios.
Feel free to remove the above mentione code from the sample app because everything is managed by the gem.
Joyau Friendly_id(Rails 5)
Add the latest gem from rubygem web to the gemfile and run bundle
gemme 'friendly_id', '~> 5.1'
les rails génèrent un friendly_id
La commande ci-dessus génère un fichier d'initialisation et un fichier de migration.
exécuter db: migrer
Créez des enregistrements et modifiez notre méthode set_post comme indiqué ci-dessous. Tous les anciens enregistrements doivent être régénérés, au cas où vous en auriez.
def set_post Post.friendly.find("Joe Schmoe".parameterize) end
Mise à jour du titre du message
Slug se mettra à jour automatiquement lorsque vous mettrez à jour l'attribut title. Mais ce n'est pas une bonne pratique de mettre à jour les slugs trop fréquemment. L'application peut générer des erreurs en cliquant sur l'une des URL mises en signet, car n'importe qui peut avoir d'anciens signets. Nous devons éviter cela en ajoutant un symbole d'historique à l'option d'utilisation dans votre modèle Post.
def slug_candidates [ :title, [:title, :id] ] fin
slug_candidates feature was added in friendlyId 5. It allows us to tell the friendly id gem, what needs to be done in case of duplicate slugs.
The code mentioned above advises FriendlyId that it needs to utilize the slug_candidates technique to make the slug uniq. It will attempt the rundown right from the beginning to the end, so in the case above, it will attempt to produce the slug first utilizing the title, and afterwards, if a post by that title already exists, it will attempt to fix the ID again.
Slugs are the primary things read by search engines. That ought to, as of now, give you an idea on how essential they are. To utilize a slug, first add the slug alternative to the friendly_id assistant in the Post Model.
Nous utilisons des cookies sur notre site web pour vous offrir l'expérience la plus pertinente en mémorisant vos préférences et vos visites répétées. En cliquant sur "ACCEPTER TOUS", vous consentez à l'utilisation de TOUS les cookies. Toutefois, vous pouvez consulter la rubrique "Paramètres des cookies" pour donner un consentement contrôlé.
Ce site Web utilise des cookies pour améliorer votre expérience lorsque vous naviguez sur le site Web. Parmi ceux-ci, les cookies classés comme nécessaires sont stockés sur votre navigateur car ils sont essentiels au fonctionnement des fonctionnalités de base du site Web. Nous utilisons également des cookies tiers qui nous aident à analyser et à comprendre comment vous utilisez ce site Web. Ces cookies ne seront stockés dans votre navigateur qu'avec votre consentement. Vous avez également la possibilité de refuser ces cookies. Mais la désactivation de certains de ces cookies peut affecter votre expérience de navigation.
Les cookies nécessaires sont absolument essentiels au bon fonctionnement du site Web. Ces cookies assurent les fonctionnalités de base et les éléments de sécurité du site Web, de manière anonyme.
Biscuit
Durée
Description
cookielawinfo-checkbox-analytics
11 mois
Ce cookie est défini par le plugin GDPR Cookie Consent. Le cookie est utilisé pour stocker le consentement de l'utilisateur pour les cookies de la catégorie « Analytics ».
cookielawinfo-checkbox-fonctionnel
11 mois
Le cookie est défini par le consentement aux cookies du RGPD pour enregistrer le consentement de l'utilisateur pour les cookies de la catégorie « Fonctionnel ».
cookielawinfo-case à cocher-nécessaire
11 mois
Ce cookie est défini par le plugin GDPR Cookie Consent. Les cookies sont utilisés pour stocker le consentement de l'utilisateur pour les cookies dans la catégorie « Nécessaire ».
cookielawinfo-checkbox-autres
11 mois
Ce cookie est défini par le plugin GDPR Cookie Consent. Le cookie est utilisé pour stocker le consentement de l'utilisateur pour les cookies de la catégorie "Autre".
cookielawinfo-checkbox-performance
11 mois
Ce cookie est défini par le plugin GDPR Cookie Consent. Le cookie est utilisé pour stocker le consentement de l'utilisateur pour les cookies de la catégorie « Performance ».
visualisé_cookie_policy
11 mois
Le cookie est défini par le plugin GDPR Cookie Consent et est utilisé pour stocker si l'utilisateur a consenti ou non à l'utilisation de cookies. Il ne stocke aucune donnée personnelle.
Les cookies fonctionnels aident à exécuter certaines fonctionnalités telles que le partage du contenu du site Web sur les plateformes de médias sociaux, la collecte de commentaires et d'autres fonctionnalités tierces.
Les cookies de performance sont utilisés pour comprendre et analyser les principaux indices de performance du site Web, ce qui contribue à offrir une meilleure expérience utilisateur aux visiteurs.
Les cookies analytiques sont utilisés pour comprendre comment les visiteurs interagissent avec le site Web. Ces cookies aident à fournir des informations sur les mesures telles que le nombre de visiteurs, le taux de rebond, la source du trafic, etc.
Les cookies publicitaires sont utilisés pour fournir aux visiteurs des publicités et des campagnes marketing pertinentes. Ces cookies suivent les visiteurs sur les sites Web et collectent des informations pour proposer des publicités personnalisées.