7

我在我的帖子/索引视图上使用了一个 link_to 标记,并希望将它链接到我的帖子/显示/id 视图,并使用一个使其向下滚动到评论表单的锚点。由于某种原因,我无法让锚工作。这是我的代码:

在帖子/索引中

<%= link_to 'Add a Comment', post, :anchor => 'comment_form' %>

这无法将 # 符号附加到链接的末尾,因此它只是 localhost:3000/posts/id。我还尝试了许多 link_to 的变体,包括:

<%= link_to 'Add a Comment', post(:anchor => 'comment_form' %>

<%= link_to 'Add a Comment', :controller => 'posts', :action => 'show', :id => @post, :anchor => 'comment_form' %>

但我没有运气。

这是我的帖子#show 操作:

  def show
    @post = Post.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @post }
    end
  end

这是我希望锚滚动到的帖子/显示视图:

<h2><a name="comment_form" id="comment_form">Add a comment:</a></h2>

此外,如果我链接到索引页面上的某些内容,上述任何一项都有效,因为我可以看到哈希 # 已附加到输出的 url。由于某种原因,它在尝试链接到显示页面时不起作用。有什么帮助吗?

4

1 回答 1

14

试试这个:

link_to('Add a comment', post_path(post, :anchor => 'comment_form'))

第二个参数link_to通常按原样传递给url_for,第三个参数用作<a>最终生成的元素的属性散列。

因此,在您的第一个示例中,您将一个Post对象作为第二个参数传递,将一个哈希作为第三个参数传递。只有Post会被传递给url_for. 它永远不会看到包含该:anchor选项的哈希,因此您不会在生成的 URL 的末尾看到锚点。(但您可能会在生成的元素上看到一个anchor="comment_form"属性。)<a>

您的第二个示例在语法上不正确。我想这导致了一个错误。

你的第三个例子......应该有效。我不确定为什么没有:-)

于 2012-02-12T22:49:26.633 回答