2010-09-11 3 views
3

J'ai une application Rails qui a un contrôleur appelé domain qui a un contrôleur imbriqué appelé subdomain et stats. Je les ai définis dans routes.rb:Ruby on Rails 3: Modifier le contrôleur par défaut et l'ordre des paramètres dans le routage

resources :domains do 
    resources :subdomains, :stats 
end 

J'ai changé le to_param des modèles de domaine et sous-domaine d'utiliser le nom du domaine, par exemple .: le routage que je reçois est http://site/domains/foo/subdomains/bar.

Je voudrais le ranger jusqu'à ce qu'au lieu d'utiliser http://site/domains/foo/subdomains/bar je pourrais y accéder avec seulement http://site/foo/subdomains/bar. Je l'ai essayé ce qui suit dans routes.rb:

match "/:id/" => "domains#show", :as => :domain 

Ce qui fonctionne très bien, mais il me donne seulement la possibilité d'utiliser le chemin http://site/foo mais par exemple http://site/foo/subdomains/bar ne fonctionne pas. Je pourrais créer des lignes de correspondance pour chaque modèle et modèle imbriqué, mais cela ne fait rien pour les autres aides, à part domain_url - c'est-à-dire que edit_domain_url pointe vers /domains/foo/edit/ au lieu de /foo/edit.

Existe-t-il un moyen de modifier le routage afin que le resources génère des helpers pointant vers l'URL racine sans la partie 'domaines'?

Répondre

3

Le numéro unique match dans vos itinéraires ne crée qu'une seule route. Les helpers de ressources créent plusieurs itinéraires à la fois. Heureusement, il y a beaucoup d'options pour la personnalisation. Si vous voulez omettre /domains/ de vos chemins, il est aussi simple que:

resources :domains, :path => "/" do 
    resources :subdomains, :stats 
end 

Avec ce qui précède en config/routes.rb, en cours d'exécution rake routes dit ce qui suit:

domain_subdomains GET /:domain_id/subdomains(.:format)   
    domain_subdomains POST /:domain_id/subdomains(.:format)   
new_domain_subdomain GET /:domain_id/subdomains/new(.:format)  
edit_domain_subdomain GET /:domain_id/subdomains/:id/edit(.:format) 
    domain_subdomain GET /:domain_id/subdomains/:id(.:format)  
    domain_subdomain PUT /:domain_id/subdomains/:id(.:format)  
    domain_subdomain DELETE /:domain_id/subdomains/:id(.:format)  
     domain_stats GET /:domain_id/stats(.:format)    
     domain_stats POST /:domain_id/stats(.:format)    
     new_domain_stat GET /:domain_id/stats/new(.:format)   
    edit_domain_stat GET /:domain_id/stats/:id/edit(.:format)  
      domain_stat GET /:domain_id/stats/:id(.:format)   
      domain_stat PUT /:domain_id/stats/:id(.:format)   
      domain_stat DELETE /:domain_id/stats/:id(.:format)   
       domains GET /(.:format)        
       domains POST /(.:format)        
      new_domain GET /new(.:format)       
      edit_domain GET /:id/edit(.:format)      
       domain GET /:id(.:format)       
       domain PUT /:id(.:format)       
       domain DELETE /:id(.:format)       

On dirait que toutes les routes dont vous avez besoin!

Questions connexes