2010-06-28 7 views
3

J'ai un chemin racine dans mon fichier itinéraires:Dans Rails Routes rediriger l'action du contrôleur vers root?

root 'games#index' 

Le problème est que si quelqu'un va à: http://domain.com/games il ne montre pas la racine, nous créant ainsi deux urls pour la même page.

Y a-t-il un moyen de changer n'importe quel hit en http://domain.com/games en http://domain.com?

Je préfère ne pas tripoter avec un before_filter dans le contrôleur d'application s'il y a une façon agréable de le faire dans le dossier routes.

Merci!

Répondre

3

La manière la plus simple est de simplement configurer une redirection.

map.redirect('/games','/')

Bien, votre problème est vraiment que la route /games ne devrait pas être là en premier lieu. Supprimez la route catchall au bas de votre fichier routes.rb, et cela ne sera même pas un problème.

+1

Qu'est-ce que Jamie a suggéré sur le retrait de la route de routes.rb. Ensuite, évitez tout lien de votre code vers la route '/ games', vous pouvez utiliser la méthode d'assistance' root_path'. – Karl

+0

Salut les gars, j'ai donc: map.resources: jeux map.root,: controller => 'jeux',: action => « indice La chose est, je dois spectacle, créer, nouveau, détruire pour jeux, mais l'index doit toujours être le chemin racine. J'ai essayé la redirection, mais je reçois cette erreur: Aucune route ne correspond "/" Existe-t-il un moyen de map.resources: les jeux, mais pas l'index? – kineticac

+0

Aussi, ma raison d'avoir besoin de ceci n'est pas parce que je suis lié à lui par exemple, mais j'ai une redirection permanente d'un domaine différent que lors de la redirection, passe dans l'URL comme domain.com/games au lieu de la racine. si ENV ["RAILS_ENV"]! = 'Développement' && request.env ['HTTP_HOST']! = CURRENT_DOMAIN request.parameters [: hôte] = CURRENT_DOMAIN perm_redirect_to url_for (request.paramètres) fin – kineticac

3

J'ai eu le même problème avec les sessions. Je voulais exposer/sessions pour la connexion et la déconnexion, mais comme un mot de passe invalide vous laisse à/sessions, je voulais un moyen gracieux pour traiter un utilisateur soumettant à nouveau cette URL comme un GET (par exemple en tapant Ctrl-L,). Cela fonctionne pour moi on Rails 3:

resources :sessions, :only => [:new, :create, :destroy] 
match '/sessions' => redirect('/login') 
match '/login', :to => 'sessions#new' 

Je pense que votre code ressemblerait à quelque chose comme ceci:

resources :games, :only => [:new, :edit, :create, :destroy] 
match '/games' => redirect('/') 
+0

'match '/ games' => redirect ('/'),: via =>: get' – hlcs

0

A partir de la version actuelle de Rails (3.2.9), voici comment j'ai réalisé le même résultat:

MyApp::Application.routes.draw do 
    # ... 
    # declare the redirect first so it isn't caught by the default 
    # resource routing 
    match '/games' => redirect('/') 
    # ... 
    resources :games 
    # ... 
    root :to => 'games#index' 
end 
0

routes.rb:

root 'games#index' 

Contrôleur:

def index 
    redirect_to root_path if request.env['PATH_INFO'] === '/games' 
    @games = Game.all 
    end 
Questions connexes