2010-03-30 5 views
1

J'ai un contrôleur Rapports et divers rapports:Comment éviter les raccourcis vers map.root?

http://localhost/reports/main/this_month 
http://localhost/reports/main/last_month 
http://localhost/reports/main/this_year 

Je voulais http://localhost par défaut à http://localhost/reports/main/this_month. C'est assez facile en utilisant map.root dans mes routes.rb.

Cependant, lorsque je fais cela, les liens vers http://localhost/reports/main/this_month sont maintenant raccourcis à http://localhost. Je veux que les liens restent pleins

Répondre

2

Je pense que c'est très possible dans Rails 2. La chaîne d'URL qui est générée dépend de l'aide d'url que vous appelez dans votre vue.

map.reports '/reports/:action/:timeframe', :controller => :reports 
# todo pretty this up with some more named routes for reports 
map.root :controller => "reports", :action => "main", :timeframe => "this_month" 

Maintenant, root_url sera http://locahost/. Lorsque vous utilisez reports_url(:action => 'main', :timeframe => 'this_month'), ce sera http://localhost/reports/main/this_month. Ils rendent tous les deux la même action. Il semble que vous ayez configuré la racine, mais ne créez aucun lien avec root_url.

+0

Oui, map.reports et l'utilisation de reports_url font l'affaire. Je ne comprends pas vraiment pourquoi reports_url ne raccourcit pas mais ce qui suit: <% = link_to_unless_current 'This Month',: controller => 'reports',: action => 'main',: timeframe => 'this_month'% > –

+0

Plus de problèmes: utiliser une route nommée pour les rapports signifie maintenant que si j'utilise <% = link_to_unless_current 'This Month', reports_url (: action => 'main',: timeframe => 'this_month')%> pour désactiver le courant page dans le menu, ce code ne traite pas http: // locahost/comme courant. –

+0

Privilégiez les chemins nommés '_path' sur leurs homologues' _url' sur les pages du site. 'Link_to_unless_current' utilise l'URL actuelle pour voir s'il existe une correspondance - vous pouvez la remplacer dans' application_helpers.rb' pour gérer votre cas particulier . –

0

Pour autant que je sache, ce n'est pas possible dans Rails 2 par défaut. Il y a un plugin appelé Redirect Routing qui va le permettre, cependant, que vous pourriez examiner. Dans Rails 3, cette fonctionnalité est intégrée. Vous pouvez en lire plus à The Lowdown on Routes in Rails 3 sur Engine Yard.

+1

Si vous mettez la route monthly_reporting au-dessus de la route de la racine il correspondra à la première. –

1

Une option utilise un contrôleur fictif qui crée un redirect_to.

Routes:

map.reports '/reports/:action/:timeframe', :controller => :reports 

# this triggers the action 'index' on 'welcome' 
map.root :controller => "welcome" 

Et puis sur le contrôleur: Bienvenue

class WelcomeController < Application: ApplicationController 
    def index 
    redirect_to :controller => "reports", :action => "main", :timeframe => "this_month" 
    end 
end 
+0

Cela fonctionne, mais c'est une redirection. Ainsi, l'utilisateur ne voit plus '/' dans la barre d'adresse. Et c'est une 2ème demande - totalement inutile. –

+0

Je vois. Je pensais qu'il voulait "ne pas voir" le /. – kikito

+0

Comme Jonathan le fait remarquer, cela ne me dérange pas de voir/dans la barre d'URL du navigateur, ce sont les liens dans mon application où je ne veux pas voir/ –

Questions connexes