module ActionView::RoutingUrlFor
Открытые методы экземпляра
# 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.