rails link_to button_to ruby-on-rails ruby-on-rails-3 link-to

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)

Ver Rails Api: url_for

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.