2012-08-08 68 views
33

我新的軌道3,我想補充(:目標=>「_blank」)下面的link_to與靶坯

link_to "GOOGLE", 'http://www.google.com', class: "btn btn-large btn-primary" 

到的link_to助手,但我想用application_helper定義的link_to方法。

  1. 如何在application_helper中定義link_to方法?
  2. 如何在link_to方法中傳遞類「btn btn-large btn-primary」?

謝謝您的幫助......

回答

81

你爲什麼要重寫link_to?它已被定義在Rails中,只是像這樣使用它:

link_to "GOOGLE", "http://www.google.com", target: "_blank", class: "btn btn-large btn-primary" 

編輯:好的,理解。我建議不要覆蓋這樣一個共同的方法,以便創造一個又一個:

def link_to_blank(body, url_options = {}, html_options = {}) 
    link_to(body, url_options, html_options.merge(target: "_blank")) 
end 

它應該做的伎倆

+0

感謝您的快速回復。我不想重複自己(DRY),通過在每個link_to助手中放置:target =>「_blank」..所以我想通過在application_helper中創建一個方法來將:target =>「_blank」與link_to合併到一起。但我很難將類「btn btn-large btn-primary」傳遞給application_helper中的new link_to方法。 – joe 2012-08-08 23:22:04

+0

確定編輯我的答案,看看。使用'link_to_blank'代替,我建議不要重載'link_to',因爲它是一個非常廣泛使用的方法。 – 2012-08-09 00:48:30

+0

Link_to_blank的作品像一個魅力,它做到了!非常感謝。 – joe 2012-08-09 01:58:13

4

添加到安東尼的回答,這更類似於Rails的link_to執行情況,包括對塊的支持和傳遞無參數:

def link_to_blank(name = nil, options = nil, html_options = nil, &block) 
    target_blank = {target: "_blank"} 
    if block_given? 
    options ||= {} 
    options = options.merge(target_blank) 
    else 
    html_options ||= {} 
    html_options = html_options.merge(target_blank) 
    end 
    link_to(name, options, html_options, &block) 
end