2010-11-08 32 views
3

Je travaille sur un projet rails 3 avec un fichier de routes assez grand. Il profite d'une certaine imbrication et j'ai rencontré un problème dû en grande partie au fait que les fichiers de routes sont difficiles à gérer.Quel est un bon moyen de décomposer votre fichier routes.rb en plusieurs fichiers pour une meilleure gestion?

Existe-t-il un moyen de le diviser en plusieurs fichiers?

Quelque chose comme:

My::Application.routes.draw do 
    constraints(:subdomain => 'admin') do 
    include My::Application::Routes::AdminRoutes 
    end 

    include My::Application::Routes::MainRoutes 
end 

Ou ...

My::Application.routes.draw do 
    constraints(:subdomain => 'admin') do 
    require 'routes/admin_routes.rb' 
    end 

    require 'routes/main_routes.rb' 
end 

Ou quelque chose dans ce sens.

Merci!

Répondre

6

include insère les méthodes du module inclus dans l'espace de noms et require charge simplement le fichier dans l'espace de noms de niveau supérieur. Aucun d'entre eux ne fonctionnera pour vous.

Juste load les fichiers séparés

My::Application.routes.draw do 
    constraints(:subdomain => 'admin') do 
    load 'routes/admin_routes.rb' 
    end 

    load 'routes/main_routes.rb' 
end 
+0

Attend cool pour moi. Nous allons essayer et voir où cela nous mène. –

+1

A quoi devrait ressembler le fichier 'routes/admin_routes.rb'? Nous avons rencontré des problèmes en essayant différentes choses. A-t-il juste besoin d'être enveloppé dans un module? –

+0

Pour autant que je sache, il est évalué là-bas dans son contexte, il devrait donc contenir tout ce qui serait là si vous ne l'aviez pas décomposé en fichiers séparés. – edgerunner

0

une autre option que vous pouvez utiliser

ActionController::Routing::Routes.draw do |map| #routes.rb 

    extend NewConnections 

    some_method(map) 

end 


module NewConnections #/lib/new_connections.rb 

    def some_method(clazz) 
    clazz.root :controller => "demo" 
    end 

end 

cette connectera racine de votre application au contrôleur par défaut

+1

Cela serait bon pour le routage Rails 2.x. Il fonctionnera toujours avec Rails 3.0 mais l'utilisation de 'map' est obsolète et échouera sur 3.1+ – edgerunner