2012-08-08 9 views
33

Sono nuovo di Rails 3, vorrei aggiungere (: target => "_blank") per link_to aiutante sottolink_to con l'obiettivo bianco

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

Ma vorrei usare l'application_helper per definire link_to metodo.

  1. Come si definisce il link_to methd in application_helper?
  2. Come passare la classe: "btn btn-large btn-primary" nel metodo link_to?

Grazie per il vostro aiuto ...

risposta

81

perché si vuole ignorare link_to? È già definito in Rails, basta usarlo in questo modo:

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

Modifica: OK, capito. Vorrei consigliare contro l'override un metodo così comune in modo da creare un altro:

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

Si dovrebbe fare il trucco

+0

Grazie per la tua risposta veloce. Non volevo ripetermi (DRY), posizionando: target => "_blank" in ogni link_per helper .. quindi stavo pensando di unire: target => "_blank" con link_to helper creando un metodo in application_helper. Ma ho difficoltà a passare la classe: "btn btn-large btn-primary" al nuovo metodo link_to in application_helper. – joe

+0

Ok modificato la mia risposta, dai un'occhiata. Usa 'link_to_blank', invece, ti consiglio di ignorare' link_to' dato che è un metodo molto diffuso. –

+0

Link_to_blank funziona come un incantesimo e ha funzionato! Grazie mille. – joe

4

aggiunta alla risposta di Anthony, questo assomiglia più da vicino link_to applicazione Rails', incluso il supporto per i blocchi e senza parametri:

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