wake-up-neo.com

Erstellen eines Ankers und Umleiten zu diesem bestimmten Anker in Ruby on Rails

Ich versuche, für jeden Kommentar in meinem Blog eindeutige Anker zu erstellen, damit eine Person die URL eines Ankers in ihren Browser einfügen kann, der die Seite automatisch lädt und zu dem Punkt auf der Seite scrollen wird, an dem der Kommentar beginnt . 

Vielleicht gehe ich das falsch herum, aber ich habe es versucht, was jedoch keinen Erfolg hatte.

Kommentaransicht - Fehler 1 - Wenn der Link in einen Browser eingefügt wird, scrollen Sie nicht zur gewünschten Position

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

Kommentar-Controller - Fehler 2 - Korrekte URL im Browser, aber es wird kein Bildlauf durchgeführt. Der Browser bleibt oben auf der Seite

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

Wenn jemand helfen könnte, wäre ich sehr dankbar :)

UPDATE: Die unten aufgeführten Lösungen funktionieren fast, aber ich komme mit der folgenden URL heraus, die nicht gescrollt wird, wenn ich darauf klicke. 

# d. h. http: // localhost: 3000/posts/please-work

37
Damian

Anscheinend möchten Sie den Code link_to verwenden, den Sie in Ihrer Frage haben. Dann müssen Sie in Ihrer Kommentarliste sicherstellen, dass Sie ein Ankertag haben, das im Link mit dem gleichen Objekt bezeichnet wird.

Also das:

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

wird so etwas generieren

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

 /* html code */     

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

Sie müssen den #comment_ manuell anheften, andernfalls glaubt die link_to-Methode, dass das: Anker-Attribut, das Sie übergeben, für dieses Tag gilt.

5
vrish88

Anker ist eigentlich eine Option für den Pfad, nicht für 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

Hier ist eine Verbesserung der Antwort von @ XGamerX.

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

Oder

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

das ist der beste Weg:

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

Versuche dies:

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