Recognize routes in rails console Session

前端 未结 5 2064
无人共我
无人共我 2020-12-12 10:25

Say I have a router helper that I want more info on, like blogs_path, how do I find out the map statements behind that in console.

I tried generate and recognize and

相关标签:
5条回答
  • 2020-12-12 10:43

    There is a good summary with examples at Zobie's Blog showing how to manually check URL-to-controller/action mapping and the converse. For example, start with

     r = Rails.application.routes
    

    to access the routes object (Zobie's page, a couple years old, says to use ActionController::Routing::Routes, but that's now deprecated in favor of Rails.application.routes). You can then check the routing based on a URL:

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

    and see what URL is generated for a given controller/action/parameters combination:

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

    Thanks, Zobie!

    0 讨论(0)
  • 2020-12-12 10:45

    running the routes command from your project directory will display your routing:

    rake routes
    

    is this what you had in mind?

    0 讨论(0)
  • 2020-12-12 10:56

    Basically(if I understood your question right) it boils down to including the UrlWriter Module:

       include ActionController::UrlWriter
       root_path
       => "/"
    

    Or you can prepend app to the calls in the console e.g.:

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

    (This is all Rails v. 3.0.3)

    0 讨论(0)
  • 2020-12-12 10:56

    If you are seeing errors like

    ActionController::RoutingError: No route matches
    

    Where it should be working, you may be using a rails gem or engine that does something like Spree does where it prepends routes, you may need to do something else to view routes in console.

    In spree's case, this is in the routes file

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

    And to work like @mike-blythe suggests, you would then do this before generate or recognize_path.

    r = Spree::Core::Engine.routes
    
    0 讨论(0)
  • 2020-12-12 10:57

    In the console of a Rails 3.2 app:

    # include routing and URL helpers
    include ActionDispatch::Routing
    include Rails.application.routes.url_helpers
    
    # use routes normally
    users_path #=> "/users"
    
    0 讨论(0)
提交回复
热议问题