¿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>
atmorell
fuente

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.

Thorbjørn Hermansen
fuente
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  %>
sybohy
fuente
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 %>
Omar Qureshi
fuente
6

Puedes usar link_tocon un bloque:

<% link_to(@album) do %>
    <!-- insert html etc here -->
<% end %>
Barry Gallagher
fuente
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 %>
Rob Dawson
fuente
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