2010-11-29 35 views
1

routes:Ruby on Rails: un sous-domaine trop puissant? comment puis-je régler cela la bonne façon

match '/' => 'site_admin/admin#index' 


    resources :link_pages 
    resources :services 
    resource :user_session 
    resource :account, :controller => "users" 
    resources :password_resets 
    resources :users 
    resources :addresses 
    resources :info 

    match "/home", :to => 'info#home' 
    match "/register", :to => 'users#new' 

    root :to => 'info#home' 


    match ':controller(/:action(/:id(.:format)))' 

quand je suis arrivé à admin.lvh.me:3000/ il va site_admin/admin index # ... ce qui est génial ... mais quand j'enlève le sous-domaine, et ai juste lvh.me:3000/ il va à la même route ....

comment puis-je obtenir l'administrateur pour rester où il est. et pas de sous-domaine pour aller à ma page racine, comme dans mon fichier de routes?

Répondre

0

Les routes sont analysées dans l'ordre, donc lorsque vous demandez/à partir de n'importe quel domaine, il trouve d'abord "match"/"..." et vous envoie à la page spécifiée. Votre sous-domaine n'entre pas en jeu du tout. Vous pouvez utiliser des contraintes en fonction des demandes de prise itinéraire en fonction de sous-domaine:

http://guides.rubyonrails.org/routing.html#request-based-constraints

0

Vous ne savez pas du tout comment les facteurs de sous-domaines peuvent être impliqués. Peut-être êtes-vous en train de confondre un sous-domaine avec un parcours de nom de route (http://edgeguides.rubyonrails.org/routing.html#controller-namespaces-and-routing)?

match '/' => 'site_admin/admin#index' 

est sélectionné sur

root :to => 'info#home' 

Parce qu'il est d'abord défini dans le fichier routes. Ils sont ostensiblement la même chose.

0

Oui @Cory est juste. Les deux instructions ci-dessus sont similaires et la première route définie est considérée à chaque fois. Si vous modifiez l'itinéraire d'administration à

match '/admin' => 'site_admin/admin#index' 
alors il est logique ... Que dites?

ou bien, en utilisant le code suivant, vous pouvez déterminer votre URL conditionnelle:

request.subdomains(0).first
vous donnera le sous-domaine admin ou à valeur vide. Mais il ira à une action de contrôleur seulement qui est définie en premier dans le fichier route.rb. Ensuite, à partir de cette action à l'aide du sous-domaine, vous pouvez décider où le rediriger vers le panneau d'administration ou la page d'accueil.