web-dev-qa-db-ja.com

Ruby on Railsでアンカーを作成してこの特定のアンカーにリダイレクトする方法

私はブログのすべてのコメントに一意のアンカーを作成しようとしています。これにより、ユーザーはアンカーのURLを取得してブラウザーに貼り付けることができます。これにより、ページが自動的に読み込まれ、コメントが開始するページのポイントまでスクロールします。 。

たぶん私はこれを間違った方法でやっていますが、私はこれを試してみましたが役に立たなかったでしょう。

コメントビュー-失敗1-ブラウザに貼り付けたときに、このリンクは目的の位置までスクロールダウンしません

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

コメントコントローラ-失敗2-ブラウザのURLを修正しますが、スクロールは発生せず、ページの上部にとどまります

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

誰かが私を助けることができれば私は非常に感謝します:)

更新:以下の解決策はほぼ機能しますが、クリックしてもスクロールされない次のURLが表示されます。

#つまり http:// localhost:3000/posts/please-work

37
Damian

質問にあるlink_toコードを使用したいようです。次に、コメントのリストで、リンクに同じ名前のアンカータグがあることを確認する必要があります。

したがって、この:

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

このようなものを生成します

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

 /* html code */     

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

#comment_を手動で追加する必要があります。そうしないと、link_toメソッドは、渡した:anchor属性がそのタグ用であると見なします。

5
vrish88

実際、アンカーは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>
81
XGamerX

@XGamerXの回答を改善しました。

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

または

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

これが最善の方法です:

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

これを試して:

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