如何创build锚点并将其redirect到Ruby on Rails中的特定锚点

我试图为我的博客上的每一个评论创build独特的锚点,以便一个人可以采取一个锚点的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 

如果有人能帮助我会很感激:)

更新:下面的解决scheme几乎工作,但是我拿出下面的url,如果我点击它不滚动到。

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

它看起来像你想要在你的问题中使用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属性是针对该标记的。

实际上,锚点是path的选项,而不是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 => "comment_#{comment.id}" %> 

这是最好的方法:

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

这些链接将向下滚动到你有类似代码的位置:

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

我不知道是否有助手会为你做,但这很简单,你可以自己写。