match
- 1.0.0
- 1.1.6
- 1.2.6
- 2.0.3
- 2.1.0
- 2.2.1
- 2.3.8
- 3.0.0 (0)
- 3.0.9 (3)
- 3.1.0 (20)
- 3.2.1 (0)
- 3.2.8 (0)
- 3.2.13 (0)
- 4.0.2 (3)
- 4.1.8 (6)
- 4.2.1 (1)
- 4.2.7 (0)
- 4.2.9 (0)
- 5.0.0.1 (2)
- 5.1.7 (0)
- 5.2.3 (2)
- 6.0.0 (0)
- 6.1.3.1
- 6.1.7.7
- 7.0.0
- 7.1.3.2
- 7.1.3.4
- What's this?
match(path, options=nil)
public
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', 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' 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', to: lambda {|hash| [200, {}, ["Coming soon"]] } match 'photos/:id', to: PhotoRackApp # Yes, controller actions are just rack endpoints match 'photos/:id', to: PhotosController.action(:show)
Because request various HTTP verbs with a single action has security implications, is recommendable use HttpHelpers[rdoc-ref:HttpHelpers] 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.
- :path
-
The path prefix for the routes.
- :module
-
The namespace for :controller.
match 'path', to: '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', 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 to call or a string representing a controller’s action.
match 'path', to: 'controller#action' match 'path', to: lambda { |env| [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 within resource(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}/ } match 'json_only', constraints: { format: 'json' } class Blacklist def matches?(request) request.remote_ip == '1.2.3.4' end end match 'path', to: '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', to: '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', to: 'c#a', anchor: false
- :format
-
Allows you to specify the default value for optional format segment or disable it by supplying false.