link_to внешний URL-адрес рассматривается как внутренний, несмотря на то, что он начинается с http: // (Rails 2) - PullRequest
3 голосов
/ 05 января 2012

Я использую

link_to "Click Here", "http://www.cnn.com"

и создаёт ссылку со следующим href

"localhost:3000http://www.cnn.com"

По какой-то причине он не распознает http:// как указание на внешний URL-адрес, а обрабатывает его как относительный URL-адрес.

Я попытался перейти к источнику link_to и скопировал его в мой помощник приложения. Я обнаружил, что .html_safe выполняет преобразование, потому что, когда я вытащил его, оно работало, как ожидалось.

Я не могу понять, какой html_safe он использует. Когда я скопировал в источник HAML: Util.html_safe , он также работал нормально. Поэтому я предполагаю, что html_safe, который использует link_to, разрешает что-то другое, даже если представление является файлом Haml.

Исходя из того, что я вижу в методе Haml, кажется, что html_safe вызывает html_safe! для преобразования строки, когда она считает ее небезопасной.

Я использую обычный набор символов американского английского / латиницы, поэтому не понимаю, почему он неправильно анализирует http://

Я использую Rails 2.3.5.

Пока что я планирую закодировать href в моем представлении, чтобы не вызывать link_to для внешней ссылки, но если кто-нибудь сможет помочь мне разобраться в происходящем, я был бы очень признателен. Спасибо!

Ответы [ 2 ]

2 голосов
/ 05 января 2012

Я не могу воспроизвести это поведение, но это звучит как ошибка.Также обратите внимание, что Rails 2.3.5 довольно старый.Я считаю, что текущая версия 2.3.x - это 2.3.12.

В качестве примечания, документы API, на которые вы ссылаетесь, относятся к Rails 3.1.3.Таким образом, вы не сможете получить полезную информацию об отладке 2.3.5 из этих документов.Самый простой способ прочитать исходный код, который фактически используется в вашем приложении, - это посмотреть в папке gems на компьютере разработчика.

В любом случае, нет ничего плохого в том, чтобы вручную кодировать тег <a>, как вы 'делаешьНа самом деле, это немного более эффективно, поскольку позволяет избежать выполнения кода Ruby в link_to.Так что, возможно, лучше всего продолжать делать то, что вы делаете.

0 голосов
/ 09 января 2014

У меня была такая же проблема в файле ERB, моя проблема была решена, когда я использовал вместо заключенной в кавычки ссылку без кавычек и впоследствии вызвал html_safe.Может быть, ваша проблема будет спасена тоже.

...