代码之家  ›  专栏  ›  技术社区  ›  Eimantas

方法的url_有什么区别?

  •  1
  • Eimantas  · 技术社区  · 16 年前

    我想知道这两种方法有什么区别: ActionView::Helpers::UrlHelper.url_for ActionController::UrlWriter.url_for ?

    1 回复  |  直到 16 年前
        1
  •  1
  •   mikej heading_to_tahiti    16 年前

    版本在 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() 呼叫。

    推荐文章