2010-01-28 2 views

ответ

1

Версия в 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 является Hash он делегирует controller.url_for, которые в свою очередь делегатов к ActionController::UrlWriter.url_for.

Версия в ActionView::Helpers::UrlHelper.url_for затем добавляет дополнительное поведение, когда оно вызывается с использованием других типов аргументов. В случае, когда String передается, для вас это ускользает. При вызове с символом: назад, который либо ссылается на референт, если он доступен, либо возвращается к вызову JavaScript history.back().

+0

Так что url_for доступен в виде всего лишь оболочка для ActionController :: UrlWriter.url_for? – Eimantas

+0

В случае, когда вы называете это хэшем, да. Это дает несколько бит дополнительного поведения, как описано в ответе. – mikej

Смежные вопросы