pagina - Cómo crear un ancla y redirigir a este ancla específico en Ruby on Rails
crear pagina web con ruby on rails (6)
Intento crear anclas únicas 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. .
Tal vez estoy haciendo esto de la manera equivocada, pero lo he intentado, pero fue en vano.
Vista de comentarios - Fail 1 - cuando se pega en un navegador, este enlace no se desplaza hacia abajo hasta la posición deseada
<%= link_to ''#'', :controller => ''posts'', :action => ''show'', :id => comment.post, :anchor => ''comment_'' << comment.id.to_s %>
Controlador de comentarios - Error 2: corrige la URL en el navegador pero no se desplaza, solo se mantiene en la parte superior de la página
redirect_to :controller => ''posts'', :action => ''show'', :id => @post, :anchor => ''comment_'' + @comment.id.to_s
Si alguien pudiera ayudar, estaría muy agradecido :)
ACTUALIZACIÓN: Las siguientes soluciones casi funcionan, sin embargo, aparece la siguiente URL que no se desplaza si hago clic en ella.
# es decir, http://localhost:3000/posts/please-work
Aquí hay una mejora en la respuesta de @XGamerX.
<%= link_to ''#'', [comment.post, { anchor: dom_id(comment) }] %>
O
<%= link_to ''#'', post_path(comment.post, anchor: dom_id(comment)) %>
En realidad, el ancla es una opción para la ruta, no para el enlace_a
<%= link_to ''#'', post_path(comment.post, :anchor => "comment_#{comment.id}") %>
http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#M001565
link_to "Comment wall", profile_path(@profile, :anchor => "wall")
# => <a href="/profiles/1#wall">Comment wall</a>
Estos enlaces se desplazarán hacia abajo a la posición donde tiene código como:
<a name="comment_1"></a>
No sé si hay ayudantes que lo harán por ti, pero es muy simple y puedes escribir el tuyo.
Parece que quieres usar el código link_to
que tienes en tu 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>
Tienes que pasar manualmente el #comment_
contrario, el método link_to piensa que el atributo: anchor que estás pasando es para esa etiqueta.
Prueba esto:
<%= link_to ''#'', post_path(comment.post), :anchor => "comment_#{comment.id}" %>
esta es la mejor manera:
<%= link_to ''#'', post_path(comment.post, anchor: dom_id(comment.id)) %>