Версия в UrlHelper
- это версия, доступная в ваших представлениях. Вот его источник:
def url_for(options = {})
options ||= {}
url = case options
when String
escape = true
options
when Hash
options = { :only_path => options[:host].nil? }.update(options.symbolize_keys)
escape = options.key?(:escape) ? options.delete(:escape) : true
@controller.send(:url_for, options)
when :back
escape = false
@controller.request.env["HTTP_REFERER"] || 'javascript:history.back()'
else
escape = false
polymorphic_path(options)
end
escape ? escape_once(url) : url
end
В случае, когда параметр, переданный этому url_for
, является хэшем, он делегирует controller.url_for
, который, в свою очередь, делегирует ActionController::UrlWriter.url_for
.
Версия в ActionView::Helpers::UrlHelper.url_for
добавляет дополнительное поведение при вызове с другими типами аргументов. В случае, когда строка передается для вас, вы избегаете. При вызове с символом: back, который либо ссылается на реферер, если доступен, либо возвращается к вызову JavaScript history.back()
.