2012-08-08 16 views
33

Jestem nowy szyn 3, chciałbym dodać (: target => „_blank”), aby link_to pomocnika poniżejlink_to z docelowymi pustym

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

Ale chciałbym użyć application_helper zdefiniować link_to metoda.

  1. Jak zdefiniować link_to methd w application_helper?
  2. Jak przekazać klasę: "btn btn-large btn-primary" w metodzie link_to?

Dziękuję za pomoc ...

Odpowiedz

81

Dlaczego chcesz nadpisać link_to? Jest już zdefiniowany w Railsach, po prostu użyj go tak:

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

Edytuj: OK, rozumiem. Radzę przeciwko nadrzędnymi taką wspólną metodę więc stworzyć jeszcze jeden:

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

To powinno załatwić sprawę

+0

Dziękujemy za szybką odpowiedź. Nie chciałem się powtarzać (DRY), umieszczając: target => "_blank" w każdym helperie link_to .. więc pomyślałem o scaleniu: target => "_blank" z pomocnikiem link_to, tworząc metodę w application_helper. Ale mam trudności z przekazaniem klasy: "btn btn-large btn-primary" do nowej metody link_to w application_helper. – joe

+0

Ok edytowałem moją odpowiedź, spójrz. Zamiast tego użyj 'link_to_blank', odradzam przesłonięcie' link_to', ponieważ jest to bardzo popularna metoda. –

+0

Link_to_blank działa jak czar i to wystarczy! Dziękuję bardzo. – joe

4

Dodawanie do odpowiedzi Antoniego, to bardziej przypomina link_to realizację szynach, w tym wsparcie dla bloków i brak parametrów:

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