1
我想知道這兩種方法有什麼區別: ActionView::Helpers::UrlHelper.url_for
和 ActionController::UrlWriter.url_for
?url_for方法有什麼區別?
我想知道這兩種方法有什麼區別: ActionView::Helpers::UrlHelper.url_for
和 ActionController::UrlWriter.url_for
?url_for方法有什麼區別?
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()
調用。
因此,在視圖中可用的url_for只是ActionController :: UrlWriter.url_for的包裝? – Eimantas 2010-01-28 13:26:51
在你用哈希來調用它的情況下,是的。它確實提供了答案中涵蓋的一些額外行爲。 – mikej 2010-01-28 13:36:27