¿Cómo envuelvo link_to alrededor de algún código ruby ​​html?


116

¿Cómo envuelvo un enlace alrededor del código de vista? No puedo averiguar cómo pasar varias líneas con código ruby ​​a un solo link_tométodo. El resultado que estoy buscando es que haga clic en la columna y obtenga la página de presentación:

<div class="subcolumns">
  <div class="c25l">
        <div class="subcl">
        <%= image_tag album.photo.media.url(:thumb), :class => "image" rescue nil  %>
        </div>
    </div>
  <div class="c75r">
        <div class="subcr">
            <p><%= album.created_at %></p>
            <%= link_to h(album.title), album %>
            <p><%= album.created_at %></p>
            <p><%= album.photo_count %></p>
        </div>
  </div>
</div>

Respuestas:


270

link_to toma un bloque de código (> = Rails 2.2) que utilizará como cuerpo de la etiqueta.

Tu también

<%= link_to(@album) do %>
  html-code-here
<% end %>

Pero estoy bastante seguro de que anidar divdentro de una aetiqueta no es HTML válido.

EDITAR: =carácter agregado por el comentario de Amin Ariana a continuación.


17
Este comentario es solo una referencia: <a> <div> </div> </a> es válido en HTML5, pero no en especificaciones HTML anteriores. Consulte stackoverflow.com/questions/796087/make-a-div-into-a-link para una pregunta similar.
chucknelson

Rails 2.3.8 sigue recibiendo "error de sintaxis, inesperado ')'" utilizando la sintaxis anterior.
daedelus_j

Si tiene una ruta más compleja, puede simplemente agregar los parámetros, falta el contenido inicial, por ejemplo, <% = link_to some_path, método:: post%>
Obromios

13

Además, esto puede ser un problema para algunos:

Asegúrese de escribir <%=si está haciendo un enlace simple con código en lugar de<% .

p.ej

<%= link_to 'some_controller_name/some_get_request' do %>
  Hello World
<% end  %>

Creo que esto es obligatorio en Rails 3+
m33lky

8

Para versiones anteriores de Rails, puede usar

<% content_tag(:a, :href => foo_path) do %>
  <span>Foo</span>
<% end %>

6

Puedes usar link_tocon un bloque:

<% link_to(@album) do %>
    <!-- insert html etc here -->
<% end %>

3
link_to requiere '=' para aparecer (incluso con un bloque)
Brandon

-2

Un poco de retraso en esta respuesta, lo sé, pero me dirigieron aquí hoy y no encontré una buena respuesta. Lo siguiente debería funcionar:

<% link_to raw(html here), @album %>

5
Esto no debe usarse ya que todo el html ingresado dentro del rawes propenso a XSS.
Aurril

No necesariamente, podría darse el caso de que el HTML se genere desde algún lugar dentro de su propia aplicación que sepa que es seguro. Aún así, es mejor evitar esto en el 99% de las situaciones. (Sin mencionar que el código anterior tiene un error de todos modos, debería comenzar con <%=, no <%).
GMA

No es la mejor forma. html aquí tendría que ser generado por su propia aplicación y asegurarse de que sea seguro. Hay otras formas mejores en las respuestas anteriores.
Joshua Dance
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.