Aggiornamento: Quindi, ecco la fonte
def link_to(*args, &block)
if block_given?
options = args.first || {}
html_options = args.second
link_to(capture(&block), options, html_options)
else
name = args[0]
options = args[1] || {}
html_options = args[2]
html_options = convert_options_to_data_attributes(options, html_options)
url = url_for(options)
href = html_options['href']
tag_options = tag_options(html_options)
href_attr = "href=\"#{ERB::Util.html_escape(url)}\"" unless href
"<a #{href_attr}#{tag_options}>#{ERB::Util.html_escape(name || url)}</a>".html_safe
end
end
Come possiamo vedere, dalla sorgente, questo comportamento è di progettazione .
Si può provare una delle due soluzioni, non li ho provato, ma dovrebbe funzionare
1.) Prova di effettuare la chiamata al gateway all'interno di una chiamata a #Raw:
<%= link_to "link", raw(gateway_index_url(developer: @item.developer.api_key, tracker:"email", url:@product.url)) %>
Questo potrebbe risolvere il tuo problema specifico, un secondo approccio, mentre un po 'più forza bruta dovrebbe anche funzionare ...
2.) Se vuoi convertirlo (l'intero href) indietro puoi ... usare CGI :: unescape_html:
<%= CGI::unescape_html(link_to "link", gateway_index_url(developer: @item.developer.api_key, tracker:"email", url:@product.url)) %>
Buona fortuna, speriamo che questo aiuti.
Aggiornamento 2: chiamata fissa a cgi unescape, utilizzava "." quando dovrebbe essere "::" e la correzione della formattazione. Hai dimenticato il primo esempio per il numero 1
Il codice generato è il modo corretto di scrivere un URL di collegamento con e commerciali in esso. I browser comprenderanno gli URL con e commerciali senza caratteri di escape, ma tecnicamente non sono corretti. Se visualizzi l'origine in Firefox e trovi l'HTML per un collegamento con e commerciali senza caratteri di escape, vedrai che gli e commerciali sono evidenziati in rosso come un errore. –
Vuoi dire che/foo? A = 1 & b = 2 non è corretto e dovrebbe sempre essere scritto come/foo? A = 1 & b = 2? – EricLarch
Esattamente. Come descritto in [questa risposta] (http://stackoverflow.com/a/1911482/578288), tutti gli attributi degli elementi in HTML dovrebbero sfuggire a '&', '", '' ', e ad alcuni altri caratteri. L'attributo href' dell'elemento 'a' non fa eccezione –