Module | ActionDispatch::Routing::Mapper::Base |
In: |
lib/action_dispatch/routing/mapper.rb
|
Matches a url pattern to one or more routes. Any symbols in a pattern are interpreted as url query parameters and thus available as params in an action:
# sets :controller, :action and :id in params match ':controller/:action/:id'
Two of these symbols are special, +:controller+ maps to the controller and +:action+ to the controller‘s action. A pattern can also map wildcard segments (globs) to params:
match 'songs/*category/:title' => 'songs#show' # 'songs/rock/classic/stairway-to-heaven' sets # params[:category] = 'rock/classic' # params[:title] = 'stairway-to-heaven'
When a pattern points to an internal route, the route‘s +:action+ and +:controller+ should be set in options or hash shorthand. Examples:
match 'photos/:id' => 'photos#show' match 'photos/:id', :to => 'photos#show' match 'photos/:id', :controller => 'photos', :action => 'show'
A pattern can also point to a Rack endpoint i.e. anything that responds to call:
match 'photos/:id' => lambda {|hash| [200, {}, "Coming soon"] } match 'photos/:id' => PhotoRackApp # Yes, controller actions are just rack endpoints match 'photos/:id' => PhotosController.action(:show)
Any options not seen here are passed on as params with the url.
match 'path' => 'c#a', :module => 'sekret', :controller => 'posts' #=> Sekret::PostsController
See Scoping#namespace for its scope equivalent.
match 'path' => 'c#a', :via => :get match 'path' => 'c#a', :via => [:get, :post]
match 'path', :to => 'controller#action' match 'path', :to => lambda { |env| [200, {}, "Success!"] } match 'path', :to => RackApp
resource :bar do match 'foo' => 'c#a', :on => :member, :via => [:get, :post] end
Is equivalent to:
resource :bar do member do match 'foo' => 'c#a', :via => [:get, :post] end end
match 'path/:id', :constraints => { :id => /[A-Z]\d{5}/ } class Blacklist def matches?(request) request.remote_ip == '1.2.3.4' end end match 'path' => 'c#a', :constraints => Blacklist.new
See Scoping#constraints for more examples with its scope equivalent.
# Sets params[:format] to 'jpg' by default match 'path' => 'c#a', :defaults => { :format => 'jpg' }
See Scoping#defaults for its scope equivalent.
# Matches any request starting with 'path' match 'path' => 'c#a', :anchor => false
Mount a Rack-based application to be used within the application.
mount SomeRackApp, :at => "some_route"
Alternatively:
mount(SomeRackApp => "some_route")
For options, see match, as mount uses it internally.
All mounted applications come with routing helpers to access them. These are named after the class specified, so for the above example the helper is either some_rack_app_path or some_rack_app_url. To customize this helper‘s name, use the +:as+ option:
mount(SomeRackApp => "some_route", :as => "exciting")
This will generate the exciting_path and exciting_url helpers which can be used to navigate to this mounted app.
You can specify what Rails should route "/" to with the root method:
root :to => 'pages#main'
For options, see match, as root uses it internally.
You should put the root route at the top of config/routes.rb, because this means it will be matched first. As this is the most popular route of most Rails applications, this is beneficial.