37 votes

Comment créer une ancre et la rediriger vers cette ancre spécifique dans Ruby on Rails

Je suis en train de créer des points d'ancrage pour tous les commentaires sur mon blog, donc une personne peut prendre l'url de l'ancre et de le coller dans son navigateur, qui va automatiquement charger la page et faites défiler vers le point dans la page où leur commentaire commence.

Peut-être que je vais sur ce le mauvais sens, mais j'ai essayé ce qui était en vain.

Commentaire de vue de l'Échec 1 - lorsqu'il est collé dans un navigateur, ce lien n'est pas faites défiler vers le bas jusqu'à la position souhaitée

<%= 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 presque le travail, mais je sors avec l'URL suivante qui n'est pas affichée si je clique sur elle.

# c'est à dire http://localhost:3000/posts/please-work

81voto

XGamerX Points 561

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="http://stackoverflow.com/profiles/1#wall">Comment wall</a>
 

5voto

vrish88 Points 3918

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 virer de bord manuellement sur le #comment_ sinon la méthode link_to pense que l'attribut: anchor que vous passez est pour cette balise.

1voto

Mohamad Points 8497

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)}" %>
 

0voto

John Topley Points 58789

Essaye ça:

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

-1voto

klew Points 9437

Ces liens défileront jusqu'à l'endroit où vous avez un code comme:

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

Je ne sais pas s'il existe des aides qui le feront pour vous, mais c'est très simple et vous pouvez écrire le vôtre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X