2009-07-06 22 views
103

¿Cómo envuelvo un enlace alrededor del código de vista? No puedo imaginar cómo pasar varias líneas con código ruby ​​a un único método link_to. El resultado que busco es hacer clic en la columna y obtener la página espectáculo:¿Cómo envuelvo link_to alrededor de algún código ruby ​​html?

<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> 

Respuesta

242

link_totakes a block of code (> = Rails 2.2), que se usará como el cuerpo de la etiqueta.

Por lo tanto, lo hace

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

Pero estoy seguro de que a anidar un div dentro de una etiqueta HTML a no es válida.

EDITAR: Agregó = personaje según el comentario de Amin Ariana a continuación.

+14

Este comentario es solo una referencia:

es válido en HTML5, pero no en las especificaciones de HTML anteriores. Consulte http://stackoverflow.com/questions/796087/make-a-div-into-a-link para obtener una pregunta similar. – chucknelson

+0

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

+0

Si tiene una ruta de acceso más compleja, puede agregar los parámetros sin el contenido inicial, p. Ej. <% = link_to some_path, method:: post%> – Obromios

6

Usted puede utilizar link_to con un bloque:

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

solo en> = Rails 2.2 –

+0

¡Ah, vale, no era consciente de eso! Gracias Omar. –

+2

link_to requiere '=' para mostrarse (incluso con un bloque) – Brandon

7

Para versiones anteriores de Rails, puede utilizar

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

Me salvó el día :) gracias ... funcionó como un amuleto .. –

0

Un poco de un retraso en esta respuesta que sé - pero me fue dirigida hoy aquí, y no encontró una buena respuesta. El siguiente debería funcionar:

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

Esto no debe usarse ya que todos los html ingresados ​​dentro del 'raw' son propensos a XSS. – Aurril

+0

No necesariamente, puede ser que el HTML se genere desde algún lugar dentro de su propia aplicación que usted sabe 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

+0

No es la mejor manera. html aquí tendría que ser generado por su propia aplicación y garantizado para estar seguro. Hay otras formas mejores en las respuestas anteriores. –

11

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

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

p. Ej.

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

Creo que esto es obligatorio en Rails 3+ – m33lky

Cuestiones relacionadas