From 622e4ab424ea260cd3ebe3768b1a2a4e5ae1384e Mon Sep 17 00:00:00 2001 From: Andrew White Date: Tue, 25 Jun 2013 11:00:19 +0100 Subject: Fix shorthand routes where controller and action are in the scope Merge `:action` from routing scope and assign endpoint if both `:controller` and `:action` are present. The endpoint assignment only occurs if there is no `:to` present in the options hash so should only affect routes using the shorthand syntax (i.e. endpoint is inferred from the the path). Fixes #9856 Backport of 37b4276 --- actionpack/lib/action_dispatch/routing/mapper.rb | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'actionpack/lib/action_dispatch') diff --git a/actionpack/lib/action_dispatch/routing/mapper.rb b/actionpack/lib/action_dispatch/routing/mapper.rb index d71b21efc3..bfa816798d 100644 --- a/actionpack/lib/action_dispatch/routing/mapper.rb +++ b/actionpack/lib/action_dispatch/routing/mapper.rb @@ -779,6 +779,10 @@ module ActionDispatch child end + def merge_action_scope(parent, child) #:nodoc: + child + end + def merge_path_names_scope(parent, child) #:nodoc: merge_options_scope(parent, child) end @@ -1253,6 +1257,10 @@ module ActionDispatch paths = [path] + rest end + if @scope[:controller] && @scope[:action] + options[:to] ||= "#{@scope[:controller]}##{@scope[:action]}" + end + path_without_format = path.to_s.sub(/\(\.:format\)$/, '') if using_match_shorthand?(path_without_format, options) options[:to] ||= path_without_format.gsub(%r{^/}, "").sub(%r{/([^/]*)$}, '#\1') -- cgit v1.2.3