Les routes rails permettent de faire des choses particulièrement avancées.
Cependant une limite de la chose est qu’il est impossible, en natif, de créer des routes spécifiques à un domaine ou sous-domaine.
Avoir une route valide pour fr.example.com mais pas pour en.example.com par exemple.
Nous allons voir dans cet article comment implémenter ceci.
Pour cela, nous avons besoin d’un plugin, foreign domain routing.
Téléchargez le et placer son répertoire dans vendor/plugins.
Maintenant nous allons pouvoir ajouter une vérification sur le domaine ou le sous-domaine dans les routes.
Ecrivons-en une :
map.resources :contents, :conditions => { :subdomain => 'fr' }
Notre route ne sera valide que si l’on est sur le sous-domaine fr.
Ainsi, fr.example.com aura cette route. Ainsi que fr.www.example.com.
Mais pas www.fr.example.com ni www.example.com.
Vous pouvez faire la même chose avec le domaine :
map.resources :contents, :conditions => { :domain => 'fr.example.com' }
Seul le domaine fr.example.com contiendra cette route.
Maintenant, si vous avez de nombreuses routes, comme c’est probablement le cas, vous allez rapidement vous rendre compte que ceci rends votre routes.rb illisible.
C’est pourquoi nous allons utiliser with_options.
map.with_options :conditions => { :domain => 'fr.example.com' } do |opt|
opt.resources :contents
end
Notre route ne sera créée que si nous sommes sur le domaine fr.example.com. Et vous pouvez placer autant de routes que vous le désirez dans la boucle de la méthode with_options.
Sans ce plugin, seule la condition :method est disponible. Cependant avec celui-ci, sont rendues disponibles les conditions suivantes :
- :subdomain – Le premier sous-domaine (avant le premier . (point)).
- :domain – Le domaine entier
- :method – La méthode d’appel à la page (:get, :post, :put, :delete)
- :port – Le port (80)
- :remote_ip – L’ip de l’utilisateur
- :content_type – Valeur content_type de l’entête http
- :accepts
- :request_uri – L’url entière
- :protocol – Le protocole (http ou https)





