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

36
demandé sur Noz 2009-04-17 00:19:43

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.

5
répondu vrish88 2009-04-16 22:00:55

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>
79
répondu XGamerX 2009-04-17 11:08:30
<%= link_to '#', [comment.post, { anchor: dom_id(comment) }] %>

Ou

<%= link_to '#', post_path(comment.post, anchor: dom_id(comment)) %>
1
répondu Mohamad 2015-10-23 19:06:57

essaye ceci:

<%= link_to '#', post_path(comment.post), :anchor => "comment_#{comment.id}" %>
0
répondu John Topley 2009-04-16 20:34:28

c'est la meilleure façon:

<%= link_to '#', post_path(comment.post, anchor: dom_id(comment.id)) %>
0
répondu nilid 2017-02-20 21:15:02

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.

-1
répondu klew 2009-04-16 20:41:17