Comment créer une ancre et rediriger vers cette ancre spécifique dans Ruby on Rails
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 le coller dans leur navigateur, qui chargera automatiquement la page et faire défiler vers le bas jusqu'au point dans la page où leur commentaire commence.
peut-être que je m'y prends mal, mais j'ai essayé ce qui n'a servi à rien.
Commentaire de vue de l'Échec 1 - lorsqu'il est collé dans un navigateur, ce lien n'est pas le défilement vers le bas position
<%= link_to '#', :controller => 'posts', :action => 'show', :id => comment.post, :anchor => 'comment_' << comment.id.to_s %>
Commentaires contrôleur de l'Échec 2 - correction de l'url dans le navigateur, mais pas de défilement qui se passe, il reste simplement 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 lui en serais très reconnaissant :)
mise à jour: les solutions ci-dessous fonctionnent presque, mais je sors avec L'URL suivante qui n'est pas en cours d'affichage si je clique dessus.
# i.e. http://localhost:3000/posts/please-work
6 réponses
On dirait que vous voulez utiliser le link_to
le code que vous avez dans votre question. Ensuite, dans votre liste de commentaires, vous devez vous assurer que vous avez une étiquette ancre nommée la même chose dans le lien.
Donc:
<%= link_to 'Your comment', post_path(@comment.post) + "#comment_#{@comment.id.to_s}" %>
va générer quelque chose comme ceci
<a href="localhost:3000/posts/2#1comment_234">Your comment</a>
/* html code */
<a name="comment_1234">This is a comment</a>
vous devez taper manuellement sur le #comment_
sinon la méthode link_to pense que l'attribut :anchor que vous lui passez est pour cette balise.
en fait, anchor 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>
<%= link_to '#', [comment.post, { anchor: dom_id(comment) }] %>
Ou
<%= link_to '#', post_path(comment.post, anchor: dom_id(comment)) %>
essaye ceci:
<%= link_to '#', post_path(comment.post), :anchor => "comment_#{comment.id}" %>
c'est la meilleure façon:
<%= link_to '#', post_path(comment.post, anchor: dom_id(comment.id)) %>
ces liens feront défiler vers le bas à la position où vous avez le code comme:
<a name="comment_1"></a>
Je ne sais pas s'il y a des aides qui le feront pour vous, mais c'est très simple et vous pouvez écrire les vôtres.