Spec-Zone.ru › Ruby on Rails 8.1

module ActionView::RoutingUrlFor

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

url_for (options = nil) Показать исходный код
# File actionview/lib/action_view/routing_url_for.rb, line 82
def url_for(options = nil)
  case options
  when String
    options
  when nil
    super(only_path: _generate_paths_by_default)
  when Hash
    options = options.symbolize_keys
    ensure_only_path_option(options)

    super(options)
  when ActionController::Parameters
    ensure_only_path_option(options)

    super(options)
  when :back
    _back_url
  when Array
    components = options.dup
    options = components.extract_options!
    ensure_only_path_option(options)

    if options[:only_path]
      polymorphic_path(components, options)
    else
      polymorphic_url(components, options)
    end
  else
    method = _generate_paths_by_default ? :path : :url
    builder = ActionDispatch::Routing::PolymorphicRoutes::HelperMethodBuilder.public_send(method)

    case options
    when Symbol
      builder.handle_string_call(self, options)
    when Class
      builder.handle_class_call(self, options)
    else
      builder.handle_model_call(self, options)
    end
  end
end

Возвращает URL для указанного набора options. Принимает те же параметры, что и url_for в Action Controller (см. документацию для ActionDispatch::Routing::UrlFor#url_for). Обратите внимание, что по умолчанию :only_path имеет значение true, поэтому вместо полностью квалифицированного URL, такого как "http://example.com/controller/action", вы получите относительный "/controller/action".

Параметры

  • :anchor — указывает имя якоря, которое будет добавлено к пути.

  • :only_path — если значение равно true, возвращает относительный URL (без протокола, имени хоста и порта) (по умолчанию true, если не указан :host).

  • :trailing_slash — если значение равно true, добавляет завершающий слеш, как в "/archive/2005/". Обратите внимание, что сейчас это не рекомендуется, поскольку нарушает кэширование.

  • :host — если указан, заменяет хост по умолчанию (текущий хост).

  • :protocol — если указан, заменяет протокол по умолчанию (текущий протокол).

  • :user — встроенная HTTP-аутентификация (извлекается только при наличии :password).

  • :password — встроенная HTTP-аутентификация (извлекается только при наличии :user).

Использование именованных маршрутов

Если вместо хеша в качестве параметра options передать запись (например, объект Active Record), будет выбран именованный маршрут для этой записи. Поиск выполняется по имени класса. Поэтому при передаче объекта Workshop будет предпринята попытка использовать маршрут workshop_path. Если у вас есть вложенный маршрут, например admin_workshop_path, его нужно вызвать явно (метод url_for не может определить, какой именно маршрут использовать).

Неявное использование пространств имён контроллеров

Контроллеры, переданные с помощью параметра :controller, сохраняют своё пространство имён, если оно не является абсолютным.

Примеры

<%= url_for(action: 'index') %>
# => /blogs/

<%= url_for(action: 'find', controller: 'books') %>
# => /books/find

<%= url_for(action: 'login', controller: 'members', only_path: false, protocol: 'https') %>
# => https://www.example.com/members/login/

<%= url_for(action: 'play', anchor: 'player') %>
# => /messages/play/#player

<%= url_for(action: 'jump', anchor: 'tax&ship') %>
# => /testing/jump/#tax&ship

<%= url_for(Workshop) %>
# => /workshops

<%= url_for(Workshop.new) %>
# relies on Workshop answering a persisted? call (and in this case returning false)
# => /workshops

<%= url_for(@workshop) %>
# calls @workshop.to_param which by default returns the id
# => /workshops/5

# to_param can be re-defined in a model to provide different URL names:
# => /workshops/1-workshop-name

<%= url_for("http://www.example.com") %>
# => http://www.example.com

<%= url_for(:back) %>
# if request.env["HTTP_REFERER"] is set to "http://www.example.com"
# => http://www.example.com

<%= url_for(:back) %>
# if request.env["HTTP_REFERER"] is not set or is blank
# => javascript:history.back()

<%= url_for(action: 'index', controller: 'users') %>
# Assuming an "admin" namespace
# => /admin/users

<%= url_for(action: 'index', controller: '/users') %>
# Specify absolute path with beginning slash
# => /users
Вызов метода суперкласса

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

Spec-Zone.ru

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