Last active
March 11, 2025 21:12
Revisions
-
jtanium renamed this gist
Jul 30, 2013 . 1 changed file with 0 additions and 0 deletions.There are no files selected for viewing
File renamed without changes. -
jtanium created this gist
Jul 30, 2013 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,28 @@ module RecognizePath def recognize_path(path, options) recognized_path = Rails.application.routes.recognize_path(path, options) # We have a route that catches everything and sends it to 'errors#not_found', you might # need to rescue ActionController::RoutingError return recognized_path unless recognized_path.slice(:controller, :action) == {controller: 'errors', action: 'not_found'} # The main app didn't recognize the path, try the engines... Rails.application.railties.engines.each do |engine| # Find the route to the engine, e.g. '/blog' -> Blog::Engine (a.k.a. "mount") engine_route = Rails.application.routes.routes.find { |r| r.app.to_s == engine.class.to_s } next unless engine_route # The engine won't recognize the "mount", so strip it off the path, # e.g. '/blog/posts/new'.gsub(%r(^/blog), '') #=> '/posts/new', which will be recognized by the engine path_for_engine = path.gsub(%r(^#{engine_route.path.spec.to_s}), '') begin recognized_path = engine.routes.recognize_path(path_for_engine, options) rescue ActionController::RoutingError => e Rails.logger.debug "[#{engine}] ActionController::RoutingError: #{e.message}" end end recognized_path end end