Determine if path exists as route in Rails controller

后端 未结 5 1974
离开以前
离开以前 2021-01-13 03:57

I want to know if an arbitrary path can be mapped to a route

recognized_request_for accomplishes what I want, but I can\'t get it to work in my controller.

相关标签:
5条回答
  • 2021-01-13 04:11

    If you want to connect an arbitrary path the a controller and and action, you can use map.connect

    map.connect '/any/random/string/of/stuff', :controller => 'items', :action => 'new'
    

    You can even call out embedded param designations in the path:

    map.connect '/seeking/room/for/[:number_of_nights]/nights', :controller => 'rooms', :action => 'index'
    

    with the above you will receive the value represented in the url as part of the params hash in the controller.

    0 讨论(0)
  • 2021-01-13 04:22

    For Rails 3 the call is

    Rails.application.routes.recognize_path
    

    Instead of

    ActionController::Routing::Routes.recognize_path
    

    Example:

    def path_exists?(path)
      Rails.application.routes.recognize_path(path)
      true
    rescue ActionController::RoutingError
      false
    end
    
    0 讨论(0)
  • 2021-01-13 04:22

    SOLUTION:

    @related_page_path = '/' + @page.path
    begin
      ActionController::Routing::Routes.recognize_path(@related_page_path, :method => :get)
    rescue
      @related_page_path = nil
    end
    
    0 讨论(0)
  • 2021-01-13 04:23

    You could possibly dynamically generate the route helper method and see if it exists (using respond_to? or even just catching any thrown exception).

    0 讨论(0)
  • 2021-01-13 04:26

    I recently came across an issue where I had to check if a path existed given an array of possible paths. I had tried the above suggestion Rails.application.routes.recognize_path, but it's depericated as of rails 4.2.1. I used the following instead:

    Rails.application.routes.named_routes.routes.any?{ |key, value| key.to_s === "new_article" }
    
    0 讨论(0)
提交回复
热议问题