web-dev-qa-db-fra.com

Reconnaître les routes dans Rails Session console

Disons que j'ai un assistant de routeur sur lequel je veux plus d'informations, comme blogs_path, comment puis-je trouver les instructions de carte derrière cela dans la console.

J'ai essayé de générer et de reconnaître et j'ai eu une erreur de méthode non reconnue, même après avoir demandé "config/routes.rb"

53
sent-hil

Il y a un bon résumé avec des exemples sur Zobie's Blog montrant comment vérifier manuellement le mappage URL-contrôleur/action et l'inverse. Par exemple, commencez par

 r = Rails.application.routes

pour accéder à l'objet routes (la page de Zobie, vieille de quelques années, dit d'utiliser ActionController::Routing::Routes, mais c'est désormais obsolète au profit de Rails.application.routes). Vous pouvez ensuite vérifier le routage en fonction d'une URL:

 >> r.recognize_path "/station/index/42.html"
 => {:controller=>"station", :action=>"index", :format=>"html", :id=>"42"}

et voyez quelle URL est générée pour une combinaison contrôleur/action/paramètres donnée:

 >> r.generate :controller => :station, :action=> :index, :id=>42
 => /station/index/42

Merci, Zobie!

92
Mike Blyth

Dans la console d'une application Rails 3.2:

# include routing and URL helpers
include ActionDispatch::Routing
include Rails.application.routes.url_helpers

# use routes normally
users_path #=> "/users"
51
Nick

Fondamentalement (si j'ai bien compris votre question), cela revient à inclure le module UrlWriter:

   include ActionController::UrlWriter
   root_path
   => "/"

Ou vous pouvez ajouter l'application aux appels dans la console, par exemple:

   Ruby-1.9.2-p136 :002 > app.root_path
   => "/" 

(C'est tout Rails v. 3.0.3)

34
Sam Figueroa

Si vous voyez des erreurs comme

ActionController::RoutingError: No route matches

Là où cela devrait fonctionner, vous pouvez utiliser un Rails gem ou moteur qui fait quelque chose comme Spree fait où il ajoute des itinéraires, vous devrez peut-être faire autre chose pour afficher les itinéraires dans la console.

Dans le cas de Spree, c'est dans le fichier routes

Spree::Core::Engine.routes.prepend do
  ...
end

Et pour travailler comme @ mike-blythe le suggère, vous devez alors le faire avant generate ou recognize_path.

r = Spree::Core::Engine.routes
3
Mark Swardstrom

l'exécution de la commande routes depuis votre répertoire de projet affichera votre routage:

rake routes

c'est ça que tu avais en tête?

2
Pete