2010-02-15 3 views
6

Je construis actuellement une application Rails et je voudrais m'en tenir à toutes ces choses fantaisistes comme REST et Ressources, mais j'aimerais personnaliser un peu mes routes. Je veux que mon itinéraire GET soit un peu plus verbeux - l'application que je crée est un simple blog, donc au lieu de GET /posts/1 je préférerais quelque chose comme GET /posts/1-my-first-post.Rails Routage - routes personnalisées pour les ressources

Des idées comment faire ceci? Je n'ai rien trouvé sur le web.

Répondre

4

définir une méthode to_param dans votre modèle et tous les assistants d'URL youse ce que vous revenez avec cette méthode, par exemple:

class Post < ActiveRecord::Base 
    der to_param 
    slug 
    end 
end 

Vous aurez également besoin d'adapter vos contrôleurs pour cette. Remplacer:

Post.find(params[:id]) 

avec:

Post.find_by_slug(params[:id]) 

Notez également que la méthode de recherche soulève exception ActiveRecord :: RecordNotFound lorsque l'enregistrement ne peut pas être trouvé en utilisant la méthode find_by_ * Aucune exception ne sera donc élevé vous devez vérifier cela manuellement.

0

Ou ...

Ajouter une méthode comme celui-ci à application_helper.rb

def permalink(post) 
    "#{post_path(post)}-#{post.slug}" 
end 

Ensuite, utilisez ce qui suit dans vos points de vue (à l'aide permalink(@post) au lieu de post_path)

<%= link_to @post.title, permalink(@post) %> 
0

Alternativement ..

Ajouter un méthode comme celui-ci à post.rb

def path 
    "/posts/#{id}-#{slug}" 
end 

Ensuite, utilisez ce qui suit dans votre point de vue:

2

Vous pouvez trouver le plugin friendly_id utile car il traitera également redirections si vous renommez vos limaces (ainsi seo friendly), gère les collisions de noms et s'intègre de manière transparente à la méthode find afin que vous n'ayez pas besoin de toucher à vos méthodes de contrôleur (sauf pour le truc de redirection).