En mi sitio un usuario tiene un perfil personal con un enlace a su sitio web externo. La dirección url de los sitios que me guarde en una base de datos postgresql bajo el nombre de sitio web. Al probar el resultado, siempre me sale una url como esta:

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

lugar de http://www.example.com

Mi punto de vista índice.html.erb se parece a esto:

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

<%= will_paginate %>

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

<%= will_paginate %>

y mi _micropost.html.erb como este:

<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 he de poner una @ antes de micropost.sitio web me da un error undefined method `sitio web’ para nil:NilClass

¿Alguien me puede ayudar (soy un RoR principiante)?

KR, Fabian

  • Es posible duplicar stackoverflow.com/questions/5012188/…
  • de verdad que no. Si escribo <span class="website"><%= link_to micropost.website, micropost.website %></span> en mi _micropost.html.erb, yo también obtener un undefined method `sitio web’ para nil:NilClass de error
  • Si ese es el caso, no debe primero obtener undefined method title for nil:NilClass en la línea por encima de él? <span class="title"><%= micropost.title %></span>
  • no, <%= micropost.title %> funciona bien, pero si me gustaría cambiar este <%= @micropost.title %> lugar, me sale el mismo error (pero esta vez por el título)
  • Entonces, ¿cómo es que esto no es un duplicado
  • lo siento, esto es una especie de un duplicado de la pregunta, pero para un principiante mucho más útil que las otras preguntas. La esperanza de que podría izquierda como un consejo para los novatos.

InformationsquelleAutor Fawyd | 2013-05-23

7 Comentarios

  1. 62

    Parece que se van a almacenar las direcciones Url sin el http:// por lo que son interpretadas como direcciones Url relativas. Usted sólo necesita hacer algo como esto:

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

    o tal vez agregar un full_url método para ese modelo, que añade que si le falta.

    Por el camino, usted no puede utilizar @micropost en ese parcial porque no existe (solo tiene @microposts o micropost).

    • gracias, he probado esta y funciona bien. Lo siento, pero para mí como un principiante las anteriores respuestas no fueron lo suficientemente clara como para ver la similitud entre mi problema y el problema en el mencionado otros desbordamiento de pila-pregunta. Lo siento por este novato tonto cerebro 😉
  2. 20

    Puedes probar con este código a continuación:

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

    Esto creará un enlace que se abre en una nueva pestaña.

    • Gracias esto me ayudó.
  3. 3

    Puede hacer algo como eso:

    link_to micropost.website, url_for(micropost.website)

    Ver Rieles de Api: url_for

    Se puede experimentar en la consola de rails.
    Sólo tienes que escribir en la consola:

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

    Y ver que una cadena de resultado.

    También necesita aprender la diferencia entre el camino y la dirección url de ayudantes.
    Ver ruby on rails guía.

    Goro derechos. Usted necesita agregar «http://» para su sitio web atributo.
    Después de validar y antes de guardar el Modelo de instancia de base de datos que usted necesita para agregar este prefijo.

  4. 3

    Puede utilizar el rubí Clase 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>
  5. 0

    Yo uso el postrank-uri joya para normalizar la dirección url antes de pasar a link_to.

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

    A continuación, puede utilizar link_to "website", user.normalized_webpage, target: "_blank" en su punto de vista. Este podrá, por ejemplo, agregar el http:// a la url, si es que faltan.

  6. 0

    Estoy trabajando con Rails 5 y tuve el mismo problema. Todo lo que necesitas hacer para solucionarlo, es incluir el protocolo sobre mi link_to etiqueta. E. g. Yo había www.google.com.mx, entonces, debe ser http://www.google.com.mx. Y eso es lo que funciona bien como en el oficial doc se menciona.

    Así que, finalmente, sólo tengo algo como esto en mi punto de vista:

    <%= 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.

  7. -2

    Esto es lo que hice.

    Supongamos que tenemos @persona y tiene un enlace (@persona.enlace) # => http://www.google.com

    de sus ayudantes crear algo como esto

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

    final

    Y en el archivo que usted puede hacer

    <% @person.each do |p| %>
    
    <%= link_to 'External', extlink(p.link) %>
    
    <% end %>

    Me funciona

    • Esto no funciona para los enlaces a otros protocolos, tales como https://, ftp://, o la amplia gama de protocolos de aplicación como spotify:// – tal vez solo partido :// si desea utilizar este método. Habiendo dicho todo esto, sin embargo, sería mejor para validar la URL en la entrada

Dejar respuesta

Please enter your comment!
Please enter your name here