2009-04-16 13 views
36

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, qui chargera automatiquement la page et défilera jusqu'au point de la page où commence le commentaire.Comment créer une ancre et rediriger vers cette ancre spécifique dans Ruby on Rails

Peut-être que je vais à ce sujet dans le mauvais sens, mais j'ai essayé cela qui n'a eu aucun succès.

Commentaire vue - Fail 1 - lorsqu'il est collé dans un navigateur ce lien ne défile pas vers le bas à la position désirée contrôleur

<%= link_to '#', :controller => 'posts', :action => 'show', :id => comment.post, :anchor => 'comment_' << comment.id.to_s %> 

Commentaires - Fail 2 - Rectifier url dans le navigateur, mais pas de défilement arrive, il reste juste à haut de la page

redirect_to :controller => 'posts', :action => 'show', :id => @post, :anchor => 'comment_' + @comment.id.to_s 

Si quelqu'un pouvait aider, je serais très reconnaissant :)

MISE à JOUR: les solutions ci-dessous presque le travail, mais je sors avec l'URL suivante qui n'est pas défilée si je clique dessus.

# dire http://localhost:3000/posts/please-work

+0

Pour faire défiler l'écran l'URL doit spécifier où vous le souhaitez pour faire défiler. Pour ce faire, vous devez avoir un # commentaire_123 à la fin de votre URL. Où le texte après le '#' doit correspondre à la valeur d'un attribut 'name' dans une balise d'ancrage. L'URL de votre mise à jour ne défilera pas faute de #. – vrish88

+0

Ouais j'ai essayé ça - ça n'a pas marché! Transforme le: ancre crée cette URL # Mais en utilisant: nom à ce qui comme vous le dites est ce qui change je suis après. Une idée de pourquoi c'est le cas? # Damian

+0

Oh, d'accord, je vois. Désolé pour la confusion. J'ai mis à jour ma réponse mais il semble que vous deviez concaténer manuellement l'ancre à la fin de l'url. Sinon, la balise link_to pense que: anchor est un attribut html. J'espère que cela fonctionne :) – vrish88

Répondre

5

On dirait que vous voulez utiliser le code link_to que vous avez dans votre question. Ensuite, dans votre liste de commentaires, vous devez vous assurer que vous avez un tag d'ancrage nommé la même chose dans le lien.

donc ceci:

<%= 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_ autrement la méthode link_to pense que: attribut d'ancrage que vous passez est pour cette étiquette.

+2

Vous devez utiliser la réponse de XGamerX. Cela fonctionnerait mais ce n'est pas très élégant. – marcgg

0

Essayez ceci:

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

Cela fonctionne presque, mais je viens avec l'URL suivante qui ne défile pas si je clique dessus. # c'est-à-dire http: // localhost: 3000/posts/please-work – Damian

-1

Ces liens défiler vers le bas à la position où vous avez du code comme:

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

Je ne sais pas s'il y a des aides qui va le faire pour vous, mais il est très simple et vous pouvez écrire votre posséder.

1

est ici une amélioration sur la réponse de @ XGamerX.

<%= link_to '#', [comment.post, { anchor: dom_id(comment) }] %> 

Ou

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

c'est la meilleure façon:

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