2012-03-30 19 views
33

Estoy tratando de hacer una fila en un enlace de tabla a la página de edición. Sé que se están creando los enlaces, porque puedo imprimirlos. Estoy cerca, pero me falta algo importante. ¿Qué cambio para que el enlace funcione correctamente?Hacer una fila de la tabla en un enlace en Rails

<h1>Scouts</h1> 
<p><%= button_to "Add a new Scout", new_scout_path, :method => :get %></p> 
<div class="message-board"> 
    <table> 
    <tr> 
     <th>Name</th> 
     <th>Rank</th> 
     <th>Advancement Date</th> 
     <th>Age</th> 
    </tr> 

<% @scouts.each do |scout| %> 
    <tr <% link_to edit_scout_path(scout) %> > 
     <td><%= scout.name %></td> 
     <td><%= scout.rank %></td> 
     <td><%= scout.advancement %></td> 
     <td><%= scout.age %></td> 
    </tr> 
<% end %> 
    </table> 
</div> 
+0

También puede usar onlick = location.href = 'RUTA' en la etiqueta tr. Tuve que hacer un formato feo en algunas etiquetas erb, pero funciona perfectamente. – jhamm

Respuesta

62

Como dijo Robin, no es HTML válido. Probablemente no deberías hacer eso.

Yo personalmente pondría un evento onclick en el tr usando jQuery. El elemento tr se vería así:

<tr data-link="<%= edit_scout_path(scout) %>"> 
    ... 
</tr> 

Y a continuación, el código JavaScript asociado (colocado en un archivo tal como app/assets/javascripts/scouts.js) sería algo como esto:

$("tr[data-link]").click(function() { 
    window.location = $(this).data("link") 
}) 

Esto haría que todos los tr elementos que tienen un atributo data-link actúa como si fueran URL de la manera más discreta que puedo pensar que es posible.

+1

Entiendo la forma de manejarlo, pero ¿por qué no manejamos esto a través de los rieles y no sacamos js? – jhamm

+11

Con Rails 3.2.3 y jquery-rails 2.0.2, recibí el mensaje "this.data no es una función". Cambiar el contenido de la función jQuery a 'window.location = this.dataset.link' lo puso en funcionamiento. –

+1

¿Qué sucede si hay un botón o enlace en la misma fila en el que no queremos aplicar esta lógica? Luchando un poco con esto ahora. – jwg2s

0

Es posible que desee considerar el uso de la respuesta aquí Problem using elem.dataset with IE and JSFiddle porque this.dataset.link no funcionará en IE9.

+3

Si bien esto puede responder teóricamente a la pregunta, [sería preferible] (http://meta.stackexchange.com/q/8259) incluir las partes esenciales de la respuesta aquí y proporciona el enlace para referencia. – Spontifixus

5

Soy nuevo en los carriles y tengo el mismo problema y recurrir a la asesoría de la Ryan con algunos cambios que se están siguiendo -

$("tr").click(function() { window.location = $(this).data("link") })

Usted tiene que usar $ (este).

+0

Además, si utiliza renderizaciones parciales ajax, use **. On ('click', function() {...}); ** en su lugar ... – Gobol

+0

¿Cómo puede hacer que el enlace sea visible en la parte inferior izquierda? Hasta donde yo sé, eso dificulta que el rastreador encuentre el sitio. –

+0

Puede agregar CSS en ese enlace para que sea visible fácilmente. Cambia el color de ese enlace o algo. –

Cuestiones relacionadas