Подтвердить что ты не робот

Как определить переменную link_to для внешнего URL-адреса

На моем сайте пользователь имеет личный профиль со ссылкой на свой персональный внешний веб-сайт. URL-адрес сайтов, которые я храню в базе данных postgresql, под названием веб-сайт. Когда я проверяю результат, я всегда получаю такой URL:

http://localhost:3000/www.example.com

вместо http://www.example.com

Мой вид index.html.erb выглядит следующим образом:

<% provide(:title, 'All projects') %>
<h1>All projects</h1>

<%= will_paginate %>

<ul class="microposts">
    <%= render @microposts %>
</ul>

<%= will_paginate %>

и my _micropost.html.erb:

<li>
    <span class="title"><%= micropost.title %></span>
    <span class="website"><%= link_to micropost.website, micropost.website %></span>
    <span class="content"><%= micropost.content %></span>
    <span class="timestamp">
        Posted <%= time_ago_in_words(micropost.created_at) %> ago.
    </span>
</li>

Я не знаю, в чем проблема. Если я установил @до micropost.website, он дал мне ошибку undefined метод `website 'для nil: NilClass

Кто-нибудь может мне помочь (я новичок RoR)?

KR, Фабиан

4b9b3361

Ответ 1

Похоже, что вы сохраняете URL-адреса без http://, поэтому их интерпретируют как относительные URL-адреса. Вам просто нужно сделать что-то вроде этого:

link_to micropost.website, "http://#{micropost.website}"

или, возможно, добавить к этой модели метод full_url, который добавляет его, если он отсутствует.

Кстати, вы не можете использовать @micropost в этом частичном, потому что он не существует (у вас есть только @microposts или micropost).

Ответ 2

Вы можете попробовать с помощью этого ниже кода:

<%= link_to "your label", "your link with http", :target => "_blank" %>

Это создаст ссылку, которая открывается на новой вкладке.

Ответ 3

Вы можете сделать что-то вроде этого:

link_to micropost.website, url_for(micropost.website)

См. Rails Api: url_for

Вы можете экспериментировать в консоли rails. Просто введите консоль:

micropost = Micropost.first
helper.link_to micropost.website, url_for(micropost.website)

И вы увидите строку результата.

Также вам нужно узнать разницу между помощниками пути и URL. См. рубиновый путеводитель по направляющим.

Права Горо. Вам нужно добавить "http://" к вашему атрибуту веб-сайта. После проверки и до сохранения экземпляра модели в базу данных вам нужно добавить этот префикс.

Ответ 4

Я использую postrank-uri gem, чтобы нормализовать URL-адрес, прежде чем передавать его на link_to.

class User < ActiveRecord::Base
  def normalized_webpage
    webpage && PostRank::URI.normalize(webpage).to_s
  end
end

Затем вы можете использовать link_to "website", user.normalized_webpage, target: "_blank" в своем представлении. Это, например, добавит http:// к URL-адресу, если он отсутствует.

Ответ 5

Вы можете использовать класс ruby ​​URI

= link_to micropost.website, URI::HTTP.build({:host => micropost.website}).to_s, target: "_blank"

# <a target="_blank" href="http://www.example.com">www.example.com</a>

Ответ 6

Я работаю с Rails 5, и у меня такая же проблема. Все, что мне нужно сделать, чтобы исправить это, было включение протокола в тег link_to. Например. У меня было www.google.com.mx, тогда оно должно быть http://www.google.com.mx. И что он работает отлично, как в официальный документ.

Итак, наконец, у меня есть что-то вроде этого на мой взгляд:

<%= link_to (content_tag(:i, "help", class: 'material-icons tiny')), " http://www.google.com.mx", target: "_blank", rel: "alternate" %>

Это то же самое, что:

<%= link_to "help", "http://www.google.com.mx", target: "_blank", rel: "alternate" %>

Я надеюсь, что это поможет кому-то другому.

Ответ 7

Вот что я сделал.

Скажем, у нас есть @person, и у него есть ссылка (@person.link) # = > www.google.com

в ваших помощниках создайте что-то вроде этого

def extlink(link)

 if link.include?("http://")
  puts link
 else
  link.insert(0, "http://")
  link
 end

конец

И в вашем файле вы можете сделать

<% @person.each do |p| %>

<%= link_to 'External', extlink(p.link) %>

<% end %>

Работает для меня