Spec-Zone.ru › Ruby on Rails 4.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 542
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 554
def has_named_route?(name)
  @set.named_routes.routes[name.to_sym]
end
match(path, options=nil) Показать исходный код

Сопоставляет шаблон 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 — действию контроллера. Шаблон также может сопоставлять сегменты с подстановочными знаками (глобы) параметрам:

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

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

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

match 'photos/:id' => 'photos#show', via: [:get]
match 'photos/:id', to: 'photos#show', via: [:get]
match 'photos/:id', controller: 'photos', action: 'show', via: [:get]

Шаблон также может указывать на конечную точку Rack, т.е. на все, что отвечает на 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]

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

Опции

Любые опции, не указанные здесь, передаются как параметры в URL.

:controller

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

:action

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

:param

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

:path

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

:module

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

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

См. Scoping#namespace для эквивалента области видимости.

: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: lambda { |env| [200, {}, ["Success!"]] }, via: [:get]
match 'path', to: RackApp, via: [:get]
:on

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

resource :bar do
  match 'foo', to: 'c#a', on: :member, via: [:get, :post]
end

Эквивалентно:

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 Whitelist
  def matches?(request) request.remote_ip == '1.2.3.4' end
end
match 'path', to: 'c#a', constraints: Whitelist.new, via: [:get]

См. Scoping#constraints для получения дополнительных примеров с эквивалентом области видимости.

:defaults

Устанавливает значения по умолчанию для параметров

# Sets params[:format] to 'jpg' by default
match 'path', to: 'c#a', defaults: { format: 'jpg' }, via: [:get]

См. Scoping#defaults для эквивалента области видимости.

:anchor

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

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

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

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

Подключает приложение Rack для использования в приложении.

mount SomeRackApp, at: "some_route"

Альтернатива:

mount(SomeRackApp => "some_route")

Для опций см. match, так как mount использует её внутри.

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

mount(SomeRackApp => "some_route", as: "exciting")

Это сгенерирует вспомогательные функции exciting_path и exciting_url для навигации в этом подключенном приложении.

# File actionpack/lib/action_dispatch/routing/mapper.rb, line 517
def mount(app, options = nil)
  if options
    path = options.delete(:at)
  else
    unless Hash === app
      raise ArgumentError, "must be called with mount point"
    end

    options = app
    app, path = options.find { |k, _| k.respond_to?(:call) }
    options.delete(app) if app
  end

  raise "A rack application must be specified" unless path

  options[:as]  ||= app_name(app)
  target_as       = name_for_action(options[:as], path)
  options[:via] ||= :all

  match(path, options.merge(:to => app, :anchor => false, :format => false))

  define_generate_prefix(app, target_as)
  self
end
root(options = {}) Показать исходный код

Можно указать, куда Rails должен перенаправлять «/» с помощью метода root:

root to: 'pages#main'

Для опций см. match, так как root использует её внутри.

Вы также можете передать строку, которая будет расширена

root 'pages#main'

Маршрут root следует размещать в верхней части config/routes.rb, поскольку это означает, что он будет сопоставлен в первую очередь. Поскольку это наиболее распространённый маршрут для большинства приложений Rails, это полезно.

# File actionpack/lib/action_dispatch/routing/mapper.rb, line 339
def root(options = {})
  match '/', { :as => :root, :via => :get }.merge!(options)
end
with_default_scope(scope, &block) Показать исходный код
# File actionpack/lib/action_dispatch/routing/mapper.rb, line 547
def with_default_scope(scope, &block)
  scope(scope) do
    instance_exec(&block)
  end
end

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

Spec-Zone.ru

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