2010-01-28 58 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中的版本在使用其他类型的参数调用时会增加一些额外的行为。在传递字符串的情况下,它会被转义。当使用符号:back返回时,链接到引用者(如果可用)或返回到JavaScript history.back()调用。

+0

因此,在视图中可用的url_for只是ActionController :: UrlWriter.url_for的包装? – Eimantas 2010-01-28 13:26:51

+0

在你用哈希来调用它的情况下,是的。它确实提供了答案中涵盖的一些额外行为。 – mikej 2010-01-28 13:36:27

相关问题