This patch allows urls to be of the form :module/:controller/:action as well as :controller/:action/:id where :id is no entirely numeric by determining if what would be :module corresponds to a directory in app/controllers. If it does not then the :controller/:action/:id scheme is used.

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@150 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
This commit is contained in:
David Heinemeier Hansson 2004-12-14 12:58:25 +00:00
parent 605bc77533
commit e5a8d8ebbb
1 changed files with 10 additions and 1 deletions

View File

@ -136,11 +136,20 @@ class DispatchServlet < WEBrick::HTTPServlet::AbstractServlet
when %r{^/#{component}/#{component}/$} then
{ :module => $1, :controller => $2, :action => "index" }
when %r{^/#{component}/#{component}/#{component}$} then
{ :module => $1, :controller => $2, :action => $3 }
if DispatchServlet.modules(component).include?($1)
{ :module => $1, :controller => $2, :action => $3 }
else
{ :controller => $1, :action => $2, :id => $3 }
end
when %r{^/#{component}/#{component}/#{component}/#{id}$} then
{ :module => $1, :controller => $2, :action => $3, :id => $4 }
else
false
end
end
def self.modules(module_pattern = '[^.]+')
path = RAILS_ROOT + '/app/controllers'
Dir.entries(path).grep(/^#{module_pattern}$/).find_all {|e| File.directory?("#{path}/#{e}")}
end
end