web-dev-qa-db-fra.com

Comment créer une ancre et la 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 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

37
Damian

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.

5
vrish88

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>
80
XGamerX

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)) %>
1
Mohamad

c'est la meilleure façon:

<%= link_to '#', post_path(comment.post, anchor: dom_id(comment.id)) %>
0
nilid

Essaye ça:

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