модуль ActionView::RoutingUrlFor
Публичные методы экземпляра
# File actionview/lib/action_view/routing_url_for.rb, line 79
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
unless options.key?(:only_path)
options[:only_path] = only_path?(options[:host])
end
super(options)
when ActionController::Parameters
unless options.key?(:only_path)
options[:only_path] = only_path?(options[:host])
end
super(options)
when :back
_back_url
when Array
components = options.dup
if _generate_paths_by_default
polymorphic_path(components, components.extract_options!)
else
polymorphic_url(components, components.extract_options!)
end
else
method = _generate_paths_by_default ? :path : :url
builder = ActionDispatch::Routing::PolymorphicRoutes::HelperMethodBuilder.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 (см. документацию по ActionController::Base#url_for). Обратите внимание, что по умолчанию :only_path равен true, поэтому вы получите относительный URL «/controller/action», а не полностью квалифицированный URL, например «example.com/controller/action».
Параметры
-
:anchor- Указывает имя якоря, которое будет добавлено к пути. -
:only_path- Если true, возвращает относительный URL (без протокола, имени хоста и порта) (trueпо умолчанию, если не указан:host). -
:trailing_slash- Если true, добавляет конечный слеш, как в «/archive/2005/». Обратите внимание, что в настоящее время это не рекомендуется, так как это нарушает кэширование. -
:host- Переопределяет хост по умолчанию (текущий), если указан. -
:protocol- Переопределяет протокол по умолчанию (текущий), если указан. -
:user- Встроенная HTTP-аутентификация (извлекается только если:passwordтакже присутствует). -
:password- Встроенная HTTP-аутентификация (извлекается только если:userтакже присутствует).
Использование именных маршрутов
Передача объекта (например, Active Record) вместо хэша в качестве параметра options запустит именной маршрут для этого объекта. Поиск будет производиться по имени класса. Таким образом, передача объекта 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.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–2018 David Heinemeier Hansson
Licensed under the MIT License.