私はブログのすべてのコメントに一意のアンカーを作成しようとしています。これにより、ユーザーはアンカーの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が表示されます。
質問にある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属性がそのタグ用であると見なします。
実際、アンカーは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>
@XGamerXの回答を改善しました。
<%= link_to '#', [comment.post, { anchor: dom_id(comment) }] %>
または
<%= link_to '#', post_path(comment.post, anchor: dom_id(comment)) %>
これが最善の方法です:
<%= link_to '#', post_path(comment.post, anchor: dom_id(comment.id)) %>
これを試して:
<%= link_to '#', post_path(comment.post), :anchor => "comment_#{comment.id}" %>