2012-02-01 1 views
1

J'ai une petite base de données avec un film que j'ai vu. Maintenant, quand je veux afficher un détail d'un film, le profil du film recherché est sur l'adresse example.com/movies/21. Mais je voudrais avoir une page de profil de chaque film sur l'adresse URL plus agréable, par exemple example.com/lords-of-the-rings.Rails 3 - comment configurer les routes pour example.com/whatever-i-need

Comment puis-je le faire?

Répondre

2

Dans votre modèle, stocker le nom d'URL dans un nouveau champ, comme Movie.permalink

En config/routes.rb:

MyApp::Application.routes.draw do 
    match "movies/:permalink" => "movies#show" 
end 

Et dans votre contrôleur:

class MoviesController < ApplicationController 
    def show 
    @movie = Movie.find_by_permalink(params[:permalink]) 
    end 
end 

Pour en savoir plus sur les routes dans les rails: http://guides.rubyonrails.org/routing.html

-1

Juste pour aider à guider les réponses, vous laisserais quelque chose comme:

http://example.com/movies/lord-of-the-rings 

Si oui, saisir les params [: id] à partir de cette URL est facile.

Vous pouvez automatiser la génération de ce dernier: id en changeant to_param du modèle:

class User < ActiveRecord::Base 
    def to_param # overridden 
    name 
    end 
end 

Ensuite, vous pouvez changer la méthode d'exposition du contrôleur pour tenir compte du nouveau: format id.

user = User.find_by_name(params[:id])