1

これら2つの方法の違いは何だろうと思っています: ActionView::Helpers::UrlHelper.url_forActionController::UrlWriter.url_for?

4

1 に答える 1

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、ハッシュはそれに委任しcontroller.url_for、次にに委任しActionController::UrlWriter.url_forます。

次に、のバージョンはActionView::Helpers::UrlHelper.url_for、他のタイプの引数で呼び出されたときの動作を追加します。文字列が渡された場合、それはあなたのためにエスケープされます。シンボル:backを使用して呼び出された場合、使用可能な場合はリファラーにリンクするか、JavaScripthistory.back()呼び出しにフォールバックします。

于 2010-01-28T13:21:00.740 に答える