ruby-on-rails - button_to - rails link_to class
¿Cómo definí una variable link_to a una URL externa? (7)
En mi sitio, un usuario tiene un perfil personal con un enlace a su sitio web externo personal. La url de los sitios que almaceno en una base de datos postgresql bajo el nombre del sitio web . Cuando pruebo el resultado, siempre obtengo una url como esta:
http://localhost:3000/www.example.com
en lugar de http://www.example.com
Mi vista index.html.erb tiene este aspecto:
<% provide(:title, ''All projects'') %>
<h1>All projects</h1>
<%= will_paginate %>
<ul class="microposts">
<%= render @microposts %>
</ul>
<%= will_paginate %>
y mi _micropost.html.erb me gusta esto:
<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>
No sé cuál es el problema en este caso. Si configuro un @ antes de micropost.website , me da un error: método indefinido `website ''para nil: NilClass
¿Alguien me puede ayudar (soy un principiante de RoR)?
KR, Fabian
Esto es lo que hice.
Digamos que tenemos @person y él tiene un enlace (@ person.link) # => www.google.com
en sus ayudantes crean algo como esto
def extlink(link)
if link.include?("http://")
puts link
else
link.insert(0, "http://")
link
end
fin
Y en tu archivo puedes hacerlo.
<% @person.each do |p| %>
<%= link_to ''External'', extlink(p.link) %>
<% end %>
Funciona para mi
Estoy trabajando con Rails 5 y tuve el mismo problema. Todo lo que necesito hacer para solucionarlo, fue incluir el protocolo en mi etiqueta link_to
. Por ejemplo, tenía www.google.com.mx
, entonces debería ser http://www.google.com.mx
. Y eso es todo funciona bien como se menciona en el documento oficial .
Así que, finalmente, tengo algo como esto en mi opinión:
<%= link_to (content_tag(:i, "help", class: ''material-icons tiny'')), " http://www.google.com.mx", target: "_blank", rel: "alternate" %>
Que es lo mismo que:
<%= link_to "help", "http://www.google.com.mx", target: "_blank", rel: "alternate" %>
Espero que ayude a alguien más.
Parece que está almacenando URL sin http://
por lo que se interpretan como URL relativas. Solo necesitas hacer algo como esto:
link_to micropost.website, "http://#{micropost.website}"
o tal vez agregue un método full_url
a ese modelo que lo agregue si falta.
Por cierto, no puedes usar @micropost
en ese parcial porque no existe (solo tienes @microposts
o micropost
).
Puedes hacer algo así:
link_to micropost.website, url_for(micropost.website)
Puedes experimentar en la consola de rieles. Solo escribe en la consola:
micropost = Micropost.first
helper.link_to micropost.website, url_for(micropost.website)
Y ves una cadena de resultados.
También necesitas aprender la diferencia entre los ayudantes de ruta y url. Ver guía de rubíes sobre rieles.
Derechos de Goro. Debe agregar "http: //" a su atributo de sitio web. Después de validar y antes de guardar la instancia del Modelo en la base de datos, debe agregar este prefijo.
Puedes probar con el siguiente código:
<%= link_to "your label", "your link with http", :target => "_blank" %>
Esto creará un enlace que se abrirá en una nueva pestaña.
Puedes usar la clase URI rubí
= 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>
Uso la gema postrank-uri para normalizar la url antes de pasarla a link_to
.
class User < ActiveRecord::Base
def normalized_webpage
webpage && PostRank::URI.normalize(webpage).to_s
end
end
Luego puede usar link_to "website", user.normalized_webpage, target: "_blank"
en su vista. Esto, por ejemplo, agregará http://
a la url, si falta.