J'essaie de créer des ancres uniques pour chaque commentaire sur mon blog afin qu'une personne puisse prendre l'URL d'une ancre et la coller dans son navigateur, ce qui chargera automatiquement la page et fera défiler l'écran jusqu'au point où commence le commentaire. .
Peut-être que je m'y prends mal, mais j'ai déjà essayé cela sans succès.
Affichage des commentaires - Echec 1 - lorsqu'il est collé dans un navigateur, ce lien ne fait pas défiler l'écran jusqu'à la position souhaitée.
<%= link_to '#', :controller => 'posts', :action => 'show', :id => comment.post, :anchor => 'comment_' << comment.id.to_s %>
Contrôleur de commentaires - Echec 2 - Corrigez l'URL dans le navigateur mais aucun défilement ne se produit, il reste en haut de la page.
redirect_to :controller => 'posts', :action => 'show', :id => @post, :anchor => 'comment_' + @comment.id.to_s
Si quelqu'un pouvait m'aider, je vous en serais très reconnaissant :)
MISE À JOUR: Les solutions ci-dessous fonctionnent presque, mais je viens avec l'URL suivante sur laquelle on ne fait pas défiler l'écran si je clique dessus.
# c'est à dire. http: // localhost: 3000/posts/please-work
Il semble que vous souhaitiez utiliser le code link_to
que vous avez dans votre question. Ensuite, dans votre liste de commentaires, vous devez vous assurer que vous avez une balise d'ancrage portant le même nom dans le lien.
Donc ça:
<%= link_to 'Your comment', post_path(@comment.post) + "#comment_#{@comment.id.to_s}" %>
va générer quelque chose comme ça
<a href="localhost:3000/posts/2#1comment_234">Your comment</a>
/* html code */
<a name="comment_1234">This is a comment</a>
Vous devez manuellement coller sur le #comment_
sinon la méthode link_to pense que l'attribut: anchor que vous transmettez est celui de cette balise.
En fait, l'ancre est une option pour le chemin, pas pour le link_to
<%= 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>
Voici une amélioration par rapport à la réponse de @ XGamerX.
<%= link_to '#', [comment.post, { anchor: dom_id(comment) }] %>
Ou
<%= link_to '#', post_path(comment.post, anchor: dom_id(comment)) %>
c'est la meilleure façon:
<%= link_to '#', post_path(comment.post, anchor: dom_id(comment.id)) %>
Essaye ça:
<%= link_to '#', post_path(comment.post), :anchor => "comment_#{comment.id}" %>