2009-04-16 26 views
36

Estoy tratando de crear anclajes únicos para cada comentario en mi blog para que una persona pueda tomar la url de un ancla y pegarla en su navegador, que cargará automáticamente la página y se desplazará hacia abajo hasta el punto en la página donde comienza su comentario.Cómo crear un ancla y redirigir a este ancla específico en Ruby on Rails

Tal vez estoy haciendo esto de la manera incorrecta, pero he intentado esto, pero fue en vano.

comentario a la vista - Fallo 1 - cuando se peguen en un navegador este enlace no baje hasta la posición deseada

<%= link_to '#', :controller => 'posts', :action => 'show', :id => comment.post, :anchor => 'comment_' << comment.id.to_s %> 

controlador Comentarios - Falla 2 - URL correcta en el navegador, pero sin desplazamiento ocurre, simplemente se queda en la parte superior de la página

redirect_to :controller => 'posts', :action => 'show', :id => @post, :anchor => 'comment_' + @comment.id.to_s 

Si alguien puede ayudar estaría muy agradecido :)

ACTUALIZACIÓN: las siguientes soluciones casi trabajo, sin embargo salgo con la siguiente URL a la que no se está desplazando si hago clic en ella.

# decir http://localhost:3000/posts/please-work

+0

Con el fin de hacer la pantalla de desplazamiento de la URL tiene que especificar dónde desea que para desplazarse hasta. Para hacer esto, debe tener un # comment_123 al final de su url. Donde el texto después del '#' necesita coincidir con el valor de un atributo 'nombre' en una etiqueta de anclaje. La URL en su actualización no se desplazará por falta de un #. – vrish88

+0

Sí, lo intenté, ¡no funcionó! resulta que el ancla crea esta url # Pero usando: nombre cambia a esto, que como usted dice es lo que busco. ¿Alguna idea de por qué este es el caso? # Damian

+0

Oh, vale, ya veo. Perdón por la confusion. Actualicé mi respuesta, pero parece que tienes que concatenar manualmente el delimitador al final de la url. De lo contrario, la etiqueta link_to piensa que: anchor es un atributo html. Espero que esto funcione :) – vrish88

Respuesta

5

Parece que desea utilizar el código link_to que usted tiene en su pregunta. Luego, en su lista de comentarios, debe asegurarse de tener una etiqueta de anclaje con el mismo nombre en el enlace.

Así que esto:

<%= link_to 'Your comment', post_path(@comment.post) + "#comment_#{@comment.id.to_s}" %> 

generará algo como esto

<a href="localhost:3000/posts/2#1comment_234">Your comment</a> 

/* html code */  

<a name="comment_1234">This is a comment</a> 

Usted tiene que virar de forma manual en el #comment_ de lo contrario el método link_to piensa que el atributo: ancla que está de paso es por esa etiqueta.

+2

Debe usar la respuesta de XGamerX. Esto funcionaría, pero no es muy elegante. – marcgg

0

Prueba esto:

<%= link_to '#', post_path(comment.post), :anchor => "comment_#{comment.id}" %> 
+0

Esto casi funciona, sin embargo, salgo con la siguiente URL que no se desplaza si hago clic en ella. # es decir, http: // localhost: 3000/posts/please-work – Damian

-1

Estos enlaces desplazarse hacia abajo a la posición en la que tiene un código como:

<a name="comment_1"></a> 

no sé si hay ayudantes que lo hará por usted, pero es muy simple y se puede escribir su propio.

1

Aquí es una mejora sobre la respuesta de @ XGamerX.

<%= link_to '#', [comment.post, { anchor: dom_id(comment) }] %> 

O

<%= link_to '#', post_path(comment.post, anchor: dom_id(comment)) %> 
0

esta es la mejor manera:

<%= link_to '#', post_path(comment.post, anchor: dom_id(comment.id)) %>