Matches a url pattern to one or more routes.
You should not use the `match` method in your router without specifying an HTTP method.
If you want to expose your action to both GET and POST, use:
# sets :controller, :action and :id in params match ':controller/:action/:id', via: [:get, :post]
Note that :controller
, :action
, :id
are interpreted as url query parameters and thus available as
params
in an action.
If you want to expose your action to GET, use `get` in the router:
Instead of:
match ":controller/:action/:id"
Do:
get ":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:
get 'songs/*category/:title', to: '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', via: [:get] match 'photos/:id', to: 'photos#show', via: [:get] match 'photos/:id', controller: 'photos', action: 'show', via: [:get]
A pattern can also point to a
Rack
endpoint i.e. anything that responds to
call
:
match 'photos/:id', to: lambda {|hash| [200, {}, ["Coming soon"]] }, via: [:get] match 'photos/:id', to: PhotoRackApp, via: [:get] # Yes, controller actions are just rack endpoints match 'photos/:id', to: PhotosController.action(:show), via: [:get]
Because requesting various HTTP verbs with a single action has security
implications, you must either specify the actions in the via options or use
one of the HtttpHelpers instead
match
Options
Any options not seen here are passed on as params with the url.
- :controller
-
The route's controller.
- :action
-
The route's action.
- :param
-
Overrides the default resource identifier `:id` (name of the dynamic segment used to generate the routes). You can access that segment from your controller using
params[<:param>]
. - :path
-
The path prefix for the routes.
- :module
-
The namespace for :controller.
match 'path', to: 'c#a', module: 'sekret', controller: 'posts', via: [:get] # => 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', to: 'c#a', via: :get match 'path', to: 'c#a', via: [:get, :post] match 'path', to: 'c#a', via: :all
- :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', via: [:get] match 'path', to: lambda { |env| [200, {}, ["Success!"]] }, via: [:get] match 'path', to: RackApp, via: [:get]
- :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', to: 'c#a', on: :member, via: [:get, :post] end
Is equivalent to:
resource :bar do member do match 'foo', to: 'c#a', via: [:get, :post] end end
- :constraints
-
Constrains parameters with a hash of regular expressions or an object that responds to
matches?
. In addition, constraints other than path can also be specified with any object that responds to===
(eg. String, Array, Range, etc.).match 'path/:id', constraints: { id: /[A-Z]\d{5}/ }, via: [:get] match 'json_only', constraints: { format: 'json' }, via: [:get] class Whitelist def matches?(request) request.remote_ip == '1.2.3.4' end end match 'path', to: 'c#a', constraints: Whitelist.new, via: [:get]
See
Scoping#constraints
for more examples with its scope equivalent. - :defaults
-
Sets defaults for parameters
# Sets params[:format] to 'jpg' by default match 'path', to: 'c#a', defaults: { format: 'jpg' }, via: [:get]
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', to: 'c#a', anchor: false, via: [:get]
- :format
-
Allows you to specify the default value for optional
format
segment or disable it by supplyingfalse
.
Please login to continue.