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]
-~----------~----~----~----~------~----~------~--~---

Répondre à