2009-04-16 5 views
36

Ich versuche, eindeutige Anker für jeden Kommentar in meinem Blog zu erstellen, so dass eine Person die URL eines Ankers nehmen und in ihrem Browser einfügen kann lädt die Seite automatisch und scrollt bis zu dem Punkt auf der Seite, wo der Kommentar beginnt.So erstellen Sie einen Anker und Redirect zu diesem bestimmten Anker in Ruby on Rails

Vielleicht gehe ich das falsch herum, aber ich habe das versucht, was vergeblich war.

Kommentaransicht - Fehler 1 -, wenn sie in einem Browser eingefügt Link blättern nicht in die gewünschte Position nach unten

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

Kommentare Controller - Fehler 2 - korrekte URL in Browser aber kein Scrollen geschieht es gerade bleibt die oben auf der Seite

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

Wenn jemand helfen könnte ich sehr dankbar würde :)

UPDATE: die Lösungen unter fast Arbeit, aber ich komme aus mit der folgenden URL, zu der nicht gescrollt wird, wenn ich darauf klicke.

# heißt http://localhost:3000/posts/please-work

+0

Um den Bildschirm blättern die URL zu tun hat, um anzugeben, wo Sie es möchten, scrollen. Um dies zu tun, musst du einen # comment_123 am Ende deiner URL haben. Der Text nach dem '#' muss mit dem Wert eines Attributs 'name' in einem Anker-Tag übereinstimmen. Die URL in Ihrem Update scrollt nicht, wenn kein # vorhanden ist. – vrish88

+0

Ja, ich habe es versucht - es hat nicht funktioniert! Es stellte sich heraus das: Anker schafft diese URL # Aber mit: Name ändert sich dies, die, wie Sie sagen, ist das, was ich bin nach. Irgendeine Idee warum das der Fall ist? # Damian

+0

Oh, ok ich sehe. Entschuldigung für die Verwirrung. Ich habe meine Antwort aktualisiert, aber es sieht so aus, als ob Sie den Anker manuell am Ende der URL verketten müssen. Andernfalls denkt das link_to-Tag, dass: anchor ein html-Attribut ist. Hoffe, das funktioniert :) – vrish88

Antwort

5

Es sieht aus wie Sie den link_to Code verwenden möchten, die Sie in Ihrer Frage haben. Dann müssen Sie in Ihrer Kommentarliste sicherstellen, dass Sie ein Anker-Tag haben, das im Link dieselbe Bezeichnung hat.

So folgt aus:

<%= link_to 'Your comment', post_path(@comment.post) + "#comment_#{@comment.id.to_s}" %> 

wird so etwas wie dieses

<a href="localhost:3000/posts/2#1comment_234">Your comment</a> 

/* html code */  

<a name="comment_1234">This is a comment</a> 

Sie haben generieren manuell auf dem #comment_ tack sonst die link_to Methode denkt, dass der: Anker Attribut, das Sie vorbei sind es für dieses Tag.

+2

Sie sollten die Antwort von XGamerX verwenden. Das würde funktionieren, aber es ist nicht sehr elegant. – marcgg

0

Try this:

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

Das funktioniert fast, aber ich komme mit der folgenden URL heraus, zu der nicht gescrollt wird, wenn ich darauf klicke. # d. H. Http: // localhost: 3000/posts/please-work – Damian

-1

Diese Links werden in die Position nach unten scrollen, wo Sie Code haben wie:

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

Ich weiß nicht, ob es Helfer, die es für Sie tun, aber es ist sehr einfach und kann schreiben Sie Ihre besitzen.

1

Hier ist eine Verbesserung gegenüber @ XGamerX Antwort.

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

Oder

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

dies ist am besten Weg:

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