mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Rails router automatically calculated for you the controller and named routes in the following scenarios:
match "home/about" #=> maps to home#about with named route home_about_path match "about" #=> does not work because it cannot guess the controller match "about" => "home#about" #=> maps to home#about with named route home_about_path match "home/about", :as => "about" #=> maps to home#about with named route about_path
This commit is contained in:
parent
f5ee855f43
commit
b2c2b0ce45
2 changed files with 14 additions and 8 deletions
|
@ -55,10 +55,8 @@ module ActionDispatch
|
||||||
path = normalize_path(path)
|
path = normalize_path(path)
|
||||||
|
|
||||||
if using_match_shorthand?(path, options)
|
if using_match_shorthand?(path, options)
|
||||||
options = {
|
options[:to] ||= path[1..-1].sub(%r{/([^/]*)$}, '#\1')
|
||||||
:to => path[1..-1].sub(%r{/([^/]*)$}, '#\1'),
|
options[:as] ||= path[1..-1].gsub("/", "_")
|
||||||
:as => path[1..-1].gsub("/", "_")
|
|
||||||
}.merge!(options)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
[ path, options ]
|
[ path, options ]
|
||||||
|
@ -71,7 +69,7 @@ module ActionDispatch
|
||||||
|
|
||||||
# match "account/overview"
|
# match "account/overview"
|
||||||
def using_match_shorthand?(path, options)
|
def using_match_shorthand?(path, options)
|
||||||
path && options.except(:via, :anchor).empty? && !path.include?(':')
|
path && options.except(:via, :anchor, :to, :as).empty? && path =~ %r{^/[\w\/]+$}
|
||||||
end
|
end
|
||||||
|
|
||||||
def normalize_path(path)
|
def normalize_path(path)
|
||||||
|
|
|
@ -18,10 +18,9 @@ class TestRoutingMapper < ActionDispatch::IntegrationTest
|
||||||
default_url_options :host => "rubyonrails.org"
|
default_url_options :host => "rubyonrails.org"
|
||||||
|
|
||||||
controller :sessions do
|
controller :sessions do
|
||||||
get 'login' => :new, :as => :login
|
get 'login' => :new
|
||||||
post 'login' => :create
|
post 'login' => :create
|
||||||
|
delete 'logout' => :destroy
|
||||||
delete 'logout' => :destroy, :as => :logout
|
|
||||||
end
|
end
|
||||||
|
|
||||||
resource :session do
|
resource :session do
|
||||||
|
@ -35,6 +34,7 @@ class TestRoutingMapper < ActionDispatch::IntegrationTest
|
||||||
|
|
||||||
match 'account/overview'
|
match 'account/overview'
|
||||||
match '/account/nested/overview'
|
match '/account/nested/overview'
|
||||||
|
match 'sign_in' => "sessions#new"
|
||||||
|
|
||||||
match 'account/modulo/:name', :to => redirect("/%{name}s")
|
match 'account/modulo/:name', :to => redirect("/%{name}s")
|
||||||
match 'account/proc/:name', :to => redirect {|params| "/#{params[:name].pluralize}" }
|
match 'account/proc/:name', :to => redirect {|params| "/#{params[:name].pluralize}" }
|
||||||
|
@ -673,6 +673,14 @@ class TestRoutingMapper < ActionDispatch::IntegrationTest
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_convention_with_explicit_end
|
||||||
|
with_test_routes do
|
||||||
|
get '/sign_in'
|
||||||
|
assert_equal 'sessions#new', @response.body
|
||||||
|
assert_equal '/sign_in', sign_in_path
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def test_redirect_with_complete_url
|
def test_redirect_with_complete_url
|
||||||
with_test_routes do
|
with_test_routes do
|
||||||
get '/account/google'
|
get '/account/google'
|
||||||
|
|
Loading…
Reference in a new issue