Module: ActionDispatch::Routing::Mapper::Base
- Included in:
- ActionDispatch::Routing::Mapper
- Defined in:
- actionpack/lib/action_dispatch/routing/mapper.rb
Instance Method Summary collapse
- #default_url_options=(options) ⇒ Object (also: #default_url_options)
-
#match(path, options = nil) ⇒ Object
Matches a url pattern to one or more routes.
-
#mount(app, options = nil) ⇒ Object
Mount a Rack-based application to be used within the application.
-
#root(options = {}) ⇒ Object
You can specify what Rails should route “/” to with the root method:.
- #with_default_scope(scope, &block) ⇒ Object
Instance Method Details
#default_url_options=(options) ⇒ Object Also known as: default_url_options
427 428 429 |
# File 'actionpack/lib/action_dispatch/routing/mapper.rb', line 427 def () @set. = end |
#match(path, options = nil) ⇒ Object
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)
Options
Any options not seen here are passed on as params with the url.
- :controller
-
The route’s controller.
- :action
-
The route’s action.
- :path
-
The path prefix for the routes.
- :module
-
The namespace for :controller.
match 'path' => 'c#a', :module => 'sekret', :controller => 'posts' #=> Sekret::PostsController
See
Scoping#namespace
for its scope equivalent. - :as
-
The name used to generate routing helpers.
- :via
-
Allowed HTTP verb(s) for route.
match 'path' => 'c#a', :via => :get match 'path' => 'c#a', :via => [:get, :post]
- :to
-
Points to a
Rack
endpoint. Can be an object that responds tocall
or a string representing a controller’s action.match 'path', :to => 'controller#action' match 'path', :to => lambda { [200, {}, "Success!"] } match 'path', :to => RackApp
- :on
-
Shorthand for wrapping routes in a specific RESTful context. Valid values are
:member
,:collection
, and:new
. Only use withinresource(s)
block. For example: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
- :constraints
-
Constrains parameters with a hash of regular expressions or an object that responds to
matches?
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. - :defaults
-
Sets defaults for parameters
# Sets params[:format] to 'jpg' by default match 'path' => 'c#a', :defaults => { :format => 'jpg' }
See
Scoping#defaults
for its scope equivalent. - :anchor
-
Boolean to anchor a
match
pattern. Default is true. When set to false, the pattern matches any request prefixed with the given path.# Matches any request starting with 'path' match 'path' => 'c#a', :anchor => false
382 383 384 385 386 387 |
# File 'actionpack/lib/action_dispatch/routing/mapper.rb', line 382 def match(path, =nil) mapping = Mapping.new(@set, @scope, path, || {}) app, conditions, requirements, defaults, as, anchor = mapping.to_route @set.add_route(app, conditions, requirements, defaults, as, anchor) self end |
#mount(app, options = nil) ⇒ Object
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.
408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 |
# File 'actionpack/lib/action_dispatch/routing/mapper.rb', line 408 def mount(app, = nil) if path = .delete(:at) else = app app, path = .find { |k, v| k.respond_to?(:call) } .delete(app) if app end raise "A rack application must be specified" unless path [:as] ||= app_name(app) match(path, .merge(:to => app, :anchor => false, :format => false)) define_generate_prefix(app, [:as]) self end |
#root(options = {}) ⇒ Object
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.
263 264 265 |
# File 'actionpack/lib/action_dispatch/routing/mapper.rb', line 263 def root( = {}) match '/', .reverse_merge(:as => :root) end |
#with_default_scope(scope, &block) ⇒ Object
432 433 434 435 436 |
# File 'actionpack/lib/action_dispatch/routing/mapper.rb', line 432 def with_default_scope(scope, &block) scope(scope) do instance_exec(&block) end end |