Spec-Zone.ru › Ruby on Rails 8.1

модуль ActionDispatch::Routing::Mapper::Base

Открытые методы экземпляра

default_url_options (options)
Псевдоним для: default_url_options=
default_url_options= (options) Показать исходный код
# File actionpack/lib/action_dispatch/routing/mapper.rb, line 650
def default_url_options=(options)
  @set.default_url_options = options
end
Также имеет псевдоним: default_url_options
has_named_route? (name) Показать исходный код
# File actionpack/lib/action_dispatch/routing/mapper.rb, line 662
def has_named_route?(name)
  @set.named_routes.key?(name)
end

Проверяет, был ли уже определён следующий именованный маршрут.

match (path, options = nil) Показать исходный код
# File actionpack/lib/action_dispatch/routing/mapper.rb, line 587
def match(path, options = nil)
end

Сопоставляет шаблон URL с одним или несколькими маршрутами.

Не следует использовать метод match в маршрутизаторе, не указав HTTP-метод.

Если нужно открыть действие для запросов GET и POST, используйте:

# sets :controller, :action, and :id in params
match ':controller/:action/:id', via: [:get, :post]

Обратите внимание, что :controller, :action и :id интерпретируются как параметры запроса URL и поэтому доступны в действии через params.

Если нужно открыть действие для GET, используйте в маршрутизаторе get:

Вместо:

match ":controller/:action/:id"

Используйте:

get ":controller/:action/:id"

Два из этих символов имеют особое значение: :controller соответствует контроллеру, а :action — действию контроллера. Шаблон также может сопоставлять сегменты-шаблоны (globs) с параметрами:

get 'songs/*category/:title', to: 'songs#show'

# 'songs/rock/classic/stairway-to-heaven' sets
#  params[:category] = 'rock/classic'
#  params[:title] = 'stairway-to-heaven'

Чтобы сопоставить параметр-шаблон, ему необходимо присвоить имя. Без имени переменной, к которой можно привязать параметр glob, маршрут невозможно разобрать.

Если шаблон указывает на внутренний маршрут, в параметрах или сокращённой записи хеша должны быть заданы :action и :controller маршрута. Примеры:

match 'photos/:id', to: 'photos#show', via: :get
match 'photos/:id', controller: 'photos', action: 'show', via: :get

Шаблон также может указывать на конечную точку Rack, то есть на любой объект, поддерживающий call:

match 'photos/:id', to: -> (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

Поскольку обработка нескольких HTTP-методов одним действием связана с проблемами безопасности, необходимо либо указать действия в параметре via, либо использовать один из HttpHelpers вместо match

Параметры

Все параметры, не перечисленные здесь, передаются как параметры URL.

:controller

Контроллер маршрута.

:action

Действие маршрута.

:param

Переопределяет идентификатор ресурса по умолчанию :id (имя динамического сегмента, используемого для генерации маршрутов). Получить доступ к этому сегменту из контроллера можно с помощью params[<:param>]. В маршрутизаторе:

    resources :users, param: :name

The `users` resource here will have the following routes generated for it:

    GET       /users(.:format)
    POST      /users(.:format)
    GET       /users/new(.:format)
    GET       /users/:name/edit(.:format)
    GET       /users/:name(.:format)
    PATCH/PUT /users/:name(.:format)
    DELETE    /users/:name(.:format)

You can override `ActiveRecord::Base#to_param` of a related model to
construct a URL:

    class User < ActiveRecord::Base
      def to_param
        name
      end
    end

    user = User.find_by(name: 'Phusion')
    user_path(user)  # => "/users/Phusion"
:path

Префикс пути для маршрутов.

:module

Пространство имён для :controller.

    match 'path', to: 'c#a', module: 'sekret', controller: 'posts', via: :get
    # => Sekret::PostsController

See `Scoping#namespace` for its scope equivalent.
:as

Имя, используемое для генерации вспомогательных методов маршрутизации.

:via

Разрешённые HTTP-методы для маршрута.

    match 'path', to: 'c#a', via: :get
    match 'path', to: 'c#a', via: [:get, :post]
    match 'path', to: 'c#a', via: :all
:to

Указывает на конечную точку Rack. Это может быть объект, поддерживающий call, или строка, обозначающая действие контроллера.

    match 'path', to: 'controller#action', via: :get
    match 'path', to: -> (env) { [200, {}, ["Success!"]] }, via: :get
    match 'path', to: RackApp, via: :get
:on

Сокращённая запись для оборачивания маршрутов в определённый REST-контекст. Допустимые значения: :member, :collection и :new. Используйте только внутри блока resource(s). Например:

    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

Ограничивает параметры с помощью хеша регулярных выражений или объекта, поддерживающего matches?. Кроме того, для ограничений, кроме пути, можно указать любой объект, поддерживающий === (например, String, Array, Range и т. д.).

    match 'path/:id', constraints: { id: /[A-Z]\d{5}/ }, via: :get

    match 'json_only', constraints: { format: 'json' }, via: :get

    class PermitList
      def matches?(request) request.remote_ip == '1.2.3.4' end
    end
    match 'path', to: 'c#a', constraints: PermitList.new, via: :get

See `Scoping#constraints` for more examples with its scope equivalent.
:defaults

Задаёт значения параметров по умолчанию.

    # 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

Логическое значение, определяющее, нужно ли привязывать шаблон match. По умолчанию — true. Если задано false, шаблон соответствует любому запросу, начинающемуся с указанного пути.

    # Matches any request starting with 'path'
    match 'path', to: 'c#a', anchor: false, via: :get
:format

Позволяет задать значение по умолчанию для необязательного сегмента format или отключить его, указав false.

mount (app = nil, deprecated_options = nil, as: DEFAULT, via: nil, at: nil, defaults: nil, constraints: nil, anchor: false, format: false, path: nil, internal: nil, **mapping, &block) Показать исходный код
# File actionpack/lib/action_dispatch/routing/mapper.rb, line 605
        def mount(app = nil, deprecated_options = nil, as: DEFAULT, via: nil, at: nil, defaults: nil, constraints: nil, anchor: false, format: false, path: nil, internal: nil, **mapping, &block)
          if deprecated_options.is_a?(Hash)
            as = assign_deprecated_option(deprecated_options, :as, :mount) if deprecated_options.key?(:as)
            via ||= assign_deprecated_option(deprecated_options, :via, :mount)
            at ||= assign_deprecated_option(deprecated_options, :at, :mount)
            defaults ||= assign_deprecated_option(deprecated_options, :defaults, :mount)
            constraints ||= assign_deprecated_option(deprecated_options, :constraints, :mount)
            anchor = assign_deprecated_option(deprecated_options, :anchor, :mount) if deprecated_options.key?(:anchor)
            format = assign_deprecated_option(deprecated_options, :format, :mount) if deprecated_options.key?(:format)
            path ||= assign_deprecated_option(deprecated_options, :path, :mount)
            internal ||= assign_deprecated_option(deprecated_options, :internal, :mount)
            assign_deprecated_options(deprecated_options, mapping, :mount)
          end

          path_or_action = at

          if app.nil?
            hash_app, hash_path = mapping.find { |key, _| key.respond_to?(:call) }
            mapping.delete(hash_app) if hash_app

            app ||= hash_app
            path_or_action ||= hash_path
          end

          raise ArgumentError, "A rack application must be specified" unless app.respond_to?(:call)
          raise ArgumentError, <<~MSG unless path_or_action
            Must be called with mount point

              mount SomeRackApp, at: "some_route"
              or
              mount(SomeRackApp => "some_route")
          MSG

          rails_app = rails_app? app
          as = app_name(app, rails_app) if as == DEFAULT

          target_as = name_for_action(as, path_or_action)
          via ||= :all

          match(path_or_action, to: app, as:, via:, defaults:, constraints:, anchor:, format:, path:, internal:, **mapping, &block)

          define_generate_prefix(app, target_as) if rails_app
          self
        end

Монтирует приложение на базе Rack для использования внутри приложения.

mount SomeRackApp, at: "some_route"

См. параметры в match, так как mount использует его внутри себя.

Для всех смонтированных приложений создаются вспомогательные методы маршрутизации для доступа к ним. Их имена основаны на указанном классе, поэтому для приведённого выше примера вспомогательный метод будет называться some_rack_app_path или some_rack_app_url. Чтобы изменить имя этого вспомогательного метода, используйте параметр :as:

mount(SomeRackApp, at: "some_route", as: "exciting")

Будут созданы вспомогательные методы exciting_path и exciting_url, с помощью которых можно перейти к этому смонтированному приложению.

with_default_scope (scope, &block) Показать исходный код
# File actionpack/lib/action_dispatch/routing/mapper.rb, line 655
def with_default_scope(scope, &block)
  scope(**scope) do
    instance_exec(&block)
  end
end

© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API