Jérôme :
> >> pouet =
> >> ActionController::Routing::Routes.recognize_path('/applications/users/edit')
> >>
> >> dans pouet[:controller] j'ai "applications/users", je suis content mais
> >> maintenant je veux obtenir le nom de la classe du controller
> >> correspondant
> >> (Applications::UsersController en l'occurence).
> >> Je pourrais faire un "pouet[:controller].camelize + 'Controller'" mais
> >> je
> >> ne trouve pas ça très générique.
> >
> > pouet[:controller] contient bien une instance de la classe recherchée ?
> > si oui un pouet[:controller].class.name devrait faire l'affaire.
>
> Non, comme je l'ai indiqué pouet[:controller] contient une chaîne
> ("applications/users").
> Pour l'instant j'ai fait pouet[:controller].camelize + 'Controller' pour
> obtenir le nom de la classe du controller. Je me disais juste que Rails en
> interne avait une méthode qui faisait ça, vu qu'il doit bien le faire à un
> moment ou un autre.
Si tu fais :
ActionController::Routing::Routes.recognize(request)
Il va te le faire pour toi, car cette méthode contient cette ligne :
"#{params[:controller].camelize}Controller".constantize
Mais il te faut manipuler un objet AbstractRequest au lieu
d'un path. Dans ce cas-là, tu t'inspires de la méthode
recognized_request_for dans assertions/routing.rb
qui passe par un objet TestRequest :
def recognized_request_for(path, request_method = nil)
path = "/#{path}" unless path.first == '/'
# Assume given controller
request = ActionController::TestRequest.new({}, {}, nil)
request.env["REQUEST_METHOD"] = request_method.to_s.upcase if request_method
request.path = path
ActionController::Routing::Routes.recognize(request)
request
end
Donc controller = ActionController::Routing::Routes.recognize(request)
puis controller.name
sachant qu'on tient compte de la méthode HTTP.
Si tu ne veux pas passer par un objet Request, tu fais :
"#{nom_controleur.camelize}Controller".constantize
et puis c'est tout !
-- Jean-François.
--
À la renverse.
--~--~---------~--~----~------------~-------~--~----~
Vous avez reçu ce message, car vous êtes abonné au groupe "Railsfrance" de
Google Groups.
Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse
[email protected]
Pour résilier votre abonnement envoyez un e-mail à l'adresse [EMAIL PROTECTED]
-~----------~----~----~----~------~----~------~--~---