В чем разница между методами url_for? - PullRequest
1 голос
/ 28 января 2010

Мне интересно, в чем разница между этими двумя методами: ActionView::Helpers::UrlHelper.url_for и ActionController::UrlWriter.url_for

1 Ответ

1 голос
/ 28 января 2010

Версия в 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().

...