url_for方法有什么区别?

时间:2010-01-28 11:24:58

标签: ruby-on-rails url-for

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

1 个答案:

答案 0 :(得分: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_forActionController::UrlWriter.url_for会委托给ActionView::Helpers::UrlHelper.url_for

history.back()中的版本随后会在使用其他类型的参数调用时添加一些额外的行为。在传递String的情况下,它会为您进行转义。使用符号:back进行调用时,如果可用,则链接到引用者,或者回退到JavaScript {{1}}调用。