代码之家  ›  专栏  ›  技术社区  ›  Joe Flynn

在Rails中定义锚标记的正确方法是什么?

  •  17
  • Joe Flynn  · 技术社区  · 15 年前

    很明显从 documentation (和google)如何生成与段的链接,例如 podcast/5#comments . 你只需传递一个值 :anchor link_to .

    我关心的是生成 <a name="comments">Comments</a> 标签,即第一个链接的目的地。

    我尝试过以下方法,尽管它们似乎有效,但标记并不是我期望的那样:

    link_to "Comments", :name => "comments"
    link_to "Comments", :anchor => "comments"
    

    我想我错过了一些明显的东西。谢谢。

    3 回复  |  直到 8 年前
        1
  •  53
  •   kikito    14 年前

    您会被Ruby的语法糖(Rails使用的很多)所迷惑。在回答你的问题之前,让我简单地解释一下。

    当Ruby函数接受一个散列参数时:

    def foo(options)
      #options is a hash with parameters inside
    end
    

    您可以“忘记”放括号/方括号,然后这样称呼它:

    foo :param => value, :param2 => value
    

    Ruby将填补空白,并理解您试图完成的是:

    foo({:param => value, :param2 => value})
    

    现在,关于你的问题: link_to 可选哈希-调用一个 options 而另一个 html_options . 你可以想象它是这样定义的(这是一个近似值,它更复杂)

    def link_to(name, options, html_options)
    ...
    end
    

    现在,如果您这样调用它:

    link_to 'Comments', :name => 'Comments'
    

    鲁比会有点困惑。它将尝试为您“填空”,但不正确:

    link_to('Comments', {:name => 'Comments'}, {}) # incorrect
    

    它会认为 name => 'Comments' 零件属于选项,而不是 HTMLL选项 !

    你必须自己填补空白来帮助鲁比。将所有圆括号都放好,它将按预期工作:

    link_to('Comments', {}, {:name => 'Comments'}) # correct
    

    如果需要,可以删除最后一组括号:

    link_to("Comments", {}, :name => "comments") # also correct
    

    但是,为了使用HTML_选项,必须保留第一组括号。例如,对于包含确认消息和名称的链接,需要执行此操作:

    link_to("Comments", {:confirm => 'Sure?'}, :name => "comments")
    

    其他Rails帮助器具有类似的结构(即 form_for ,请 collection_select )所以你应该学习这个技巧。如果有疑问,只需添加所有括号。

        2
  •  14
  •   notapatch Muhammad Ateq Ejaz    11 年前

    如果你想通过铁路,我建议 content_tag ( docs )

    例子:

    content_tag(:a, 'Comments', :name => 'comments')
    
        3
  •  0
  •   Muhammad Aqeel    8 年前
    <%= link_to('new button', action: 'login' , class: "text-center") %>
    

    为login.html i.g创建了一个锚标记

    <a href="login.html" class = "text-center"> new button </a>
    

    为了

    <a href="admin/login.html" class = "text-center"> new button </a>
    

    使用

    <%= link_to('new button', controller: 'admin',
        action: 'login' , class: "text-center") %>