#ruby-on-rails #link-to
#ruby-on-rails #ссылка на
Вопрос:
У меня есть строка, в которую пользователи вводят URL-адрес, который позже отображается в index.html . Как я могу превратить это в рабочую внешнюю ссылку? Прямо сейчас ссылка отображается должным образом (например www.facebook.com/tester ), но когда я нажимаю на ссылку, я получаю сообщение «маршрут не совпадает» /www.facebook.com/tester » ошибка маршрутизации. Я попробовал user.facebook.link, но это не сработало.
Я также попытался добавить href=» «, но безуспешно.
<%= link_to nil, user.facebook %>
Комментарии:
1. в сообщении об ошибке говорилось, что маршрут не соответствует чему?
2. @Andy маршрут не совпадает «/www.facebook.com/tester «. Я предполагаю, что Rails считает, что ссылка принадлежит внутреннему маршруту. Однако это не то, что я ищу. Ссылка должна идти на другой сайт, в данном случае на Facebook.
3. Если в нем нет части «http: //», он будет считать, что это относительная ссылка. Почему бы просто не использовать обычный
<a ...>
тег или помощник, который оборачивает его?4. @DaveNewton Разве мне не нужен <% %> для встроенного ruby, чтобы отобразить строку, которую они ввели?
5. Конечно, но это не значит, что вам нужно использовать помощник по ссылкам (хотя вы, вероятно, можете). Я держу их отдельно, чтобы избежать когнитивных накладных расходов (в целом).
<a href="http://facebook.../<%= user.facebook %>">Go to facebook</a>
Ответ №1:
Как упоминалось @Mischa, вы можете добавить:
<%=link_to nil, "http://#{user.facebook}"%>
для добавления протокола в link.
Если вам нужно присвоить ссылке метку, скажем, , Facebook
, вы можете использовать ее:
<%=link_to 'Facebook', "http://#{user.facebook}"%>`
Вот и все.
Я надеюсь, что это поможет
Комментарии:
1. Что, если входные данные варьировались от доменов с «http:» и тех, которые начинались с «www»? «Http:» добавит еще один «http:» к некоторым доменам и не будет работать. Есть ли способ обойти это?
2. Вы можете использовать метод сканирования, чтобы проверить, содержится ли «http» или нет. Например:
user.facebook.scan(^http)
должен возвращать пустой массив, если строка не начинается с http.