如何在Ruby on Rails中创建锚点并重定向到此特定锚点

时间:2009-04-16 20:19:44

标签: ruby-on-rails ruby hyperlink anchor page-jump

我正在尝试为我博客上的每条评论创建独特的锚点,这样一个人就可以获取一个锚点的网址并将其粘贴到浏览器中,这将自动加载页面并向下滚动到页面中的点。他们的评论开始了

也许我会以错误的方式解决这个问题,但我已经尝试了这个但是无济于事。

评论视图 - 失败1 - 当粘贴在浏览器中时,此链接不会向下滚动到所需位置

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

评论控制器 - 失败2 - 在浏览器中更正网址但没有滚动发生它只是停留在页面顶部

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

如果有人可以提供帮助,我将非常感激:)

更新:下面的解决方案几乎可以正常工作,但是如果我点击它,我会得到以下不会滚动到的URL。

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

6 个答案:

答案 0 :(得分:80)

实际上,锚是路径的选项,而不是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>

答案 1 :(得分:5)

您似乎想要使用问题中的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属性是针对该标记的。

答案 2 :(得分:1)

这是对@ XGamerX的答案的改进。

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

或者

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

答案 3 :(得分:0)

试试这个:

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

答案 4 :(得分:0)

这是最好的方法:

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

答案 5 :(得分:-1)

这些链接将向下滚动到您拥有以下代码的位置:

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

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