Question

Je suis en train de réaliser des URL comme celui-ci dans Rails:

http://localhost/posts/1234/post-slug-name

à la fois ID et le nom limace au lieu de soit

http://localhost/posts/1234

ou

http://localhost/posts/post-slug-name

(en ce moment j'ai simplement le nom limace dans l'URL, de sorte que cette partie est terminée). Comment puis-je faire?

UPD

J'ai trouvé un article sur ce point: http://augustl.com/blog/2009/styling_rails_urls/ , au lieu de /id/slug il suggère d'utiliser /id-slug qui fonctionne parfaitement pour moi, donc je vais avec cela.

Était-ce utile?

La solution

Vous aurez envie d'ajouter un itinéraire régulier avec Route englobement en plus à votre itinéraire de ressources (en supposant bien sûr que comment vos routes posts sont définies). Par exemple,

map.resources :posts
map.connect '/posts/:id/*slugs', :controller => 'posts', :action => 'show'

Autres conseils

Rails a une prise en charge intégrée pour les URL SEO friendly.

Vous pouvez créer une url sous la forme:. "Id-titre" en remplaçant simplement la méthode to_param dans votre modèle

Ceci est l'un de mes projets et crée une URL avec l'identifiant, le nom de la catégorie et le nom du modèle:

def to_param
  "#{id}-#{category.name.parameterize}-#{name.parameterize}"
end 

Rails est assez intelligent pour extraire ce retour dans l'id simple lorsque vous accédez à votre action de contrôleur, de sorte que le suivant fonctionne simplement:

def show
  @model = Model.find(params[:id])
  render :action => "show"
end

Utilisez friendly_id . Il dispose d'une fonctionnalité intéressante. Vous pouvez mettre à jour votre URL sans casser l'ancien

vue Génération url ne fonctionne pas pour moi. Je viens d'ajouter une petite méthode dans le modèle

def to_param
  self.friendly_id
end

Je sais que la question est assez vieux, mais je pense qu'il mérite encore un certain intérêt et aucune des réponses sont mises à jour ou fournir un moyen de générer exactement ce que l'OP cherchait (c.-à-http://localhost/posts/1234/post-slug-name).

Dans routes.rb

get 'posts/:id/:slug', to: 'posts#show', as: 'slugged_post'

Ensuite, dans les vues

<%= link_to slugged_post_path(post, post.name.parameterize) %>

Vous pouvez définir une méthode slug dans votre modèle pour éviter d'appeler Paramétrez dans les vues.

la pierre précieuse stringex contient ActsAsUrl pour créer des représentations URI-friendly d'un attribut

https://github.com/rsl/stringex

Il contient également une bibliothèque Unidecoder, qui peut convertir Unicode en ASCII.

j'ai écrit un post sur les limaces dans Rails 3. Il fournit assez URL et plus encore , sécurise votre site à partir de scripts aléatoires qui demandent des informations simplement en augmentant son ID. Il évite aussi sauver les limaces dans la base de données.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top