La question suivante concerne la transmission d'une variable des routes au contrôleur. J'ai une application Ruby on Rails (v 2.3.3) avec un modèle, qui est livré à l'utilisateur avec plusieurs vues. La solution actuelle implique l'utilisation de plusieurs contrôleurs qui sont déclenchés par plusieurs routes. Par exemple:Transmission de variables au contrôleur via le routage RESTful dans Rails
ActionController::Routing::Routes.draw do |map| # defines map
map.resource :simpsons, :only => [] do |b|
b.resources :episodes, :controller => "SimpsonsEpisodes"
end
map.resource :flintstones, :only => [] do |b|
b.resources :episodes, :controller => "FlintstonesEpisodes"
end
Cependant, pour le bien de la sécheresse, je voudrais que ces routes pour fonctionner avec le même contrôleur. Pour que le contrôleur soit distinct entre les routes, je voudrais passer une variable par l'itinéraire. Par exemple:
map.resource :simpsons, :only => [] do |b|
b.resources :episodes, :controller => "Episodes", :type => "simpsons"
end
map.resource :flintstones, :only => [] do |b|
b.resources :episodes, :controller => "Episodes", :type => "flintstones"
end
Ainsi, dans le contrôleur que je pouvais faire ceci:
case(type)
when "simpsons" then ... do something for the Simpsons ...
when "flintstones" then ... do something for the Simpsons ...
else .... do something for all episodes ....
end
J'ai trouvé un moyen de le faire avec le routage non-RESTful (map.with_options etc.), mais je préférez utiliser des routes RESTful avec map.resource (s). Une solution laide pourrait être d'analyser l'URI de la demande dans le contrôleur, ce que je ne préfère pas.