Update: Więc oto źródło
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
Jak widzimy, ze źródła, takie zachowanie jest zgodne z projektem .
można spróbować jednego z dwóch rozwiązań, nie próbowałem ich, ale powinny one pracować
1.) Spróbuj umieścić wezwanie do bramy wewnątrz wywołania #raw:
<%= link_to "link", raw(gateway_index_url(developer: @item.developer.api_key, tracker:"email", url:@product.url)) %>
To może rozwiązać twój konkretny problem, drugie podejście, podczas gdy nieco bardziej brutalna siła powinna również zadziałać ...
2.) Jeśli chcesz przekonwertować (cały href) z powrotem możesz ... użyć CGI :: unescape_html:
<%= CGI::unescape_html(link_to "link", gateway_index_url(developer: @item.developer.api_key, tracker:"email", url:@product.url)) %>
Powodzenia, mam nadzieję, że to pomaga.
Aktualizacja 2: Naprawiono połączenie z cgi unescape, korzystano z "." kiedy powinno być "::" i poprawka formatująca. Zapomniałem podać przykład dla # 1
Wygenerowany znaczników jest prawidłowy sposób napisać łącza URL z ampersandów w nim. Przeglądarki będą rozumieć adresy URL z nieokreślonymi znakami ampersand, ale są one niepoprawne pod względem technicznym. Jeśli wyświetlisz Źródło w Firefoksie i znajdziesz kod HTML dla łącza z bezkreslowymi znakami ampersand, zobaczysz, że ampersandy są podświetlone na czerwono jako błąd. –
Masz na myśli to, że/foo? A = 1 & b = 2 jest nieprawidłowe i zawsze powinno być napisane jako/foo? A = 1 & b = 2? – EricLarch
Dokładnie. Jak opisano w [tej odpowiedzi] (http://stackoverflow.com/a/1911482/578288), wszystkie atrybuty elementu w kodzie HTML powinny uciec '&', '' ',' 'i kilka innych znaków.' Atrybut href' elementu 'a' nie jest wyjątkiem –