Joe*_*ynn 17 html anchor ruby-on-rails hyperlink segment
从文档(和谷歌)中可以明显看出如何生成与段的链接,例如podcast/5#comments.你只传递一个值:anchor来link_to.
我担心的是生成<a name="comments">Comments</a>标签的简单任务,即第一个链接的目的地.
我尝试了以下内容,虽然它们似乎有效,但标记并不是我所期望的:
link_to "Comments", :name => "comments"
link_to "Comments", :anchor => "comments"
Run Code Online (Sandbox Code Playgroud)
我想我错过了一些明显的东西.谢谢.
kik*_*ito 54
你对Ruby的语法糖(Rails大量使用)感到困惑.在回答你的问题之前,让我简单解释一下.
当ruby函数接受一个哈希的参数时:
def foo(options)
#options is a hash with parameters inside
end
Run Code Online (Sandbox Code Playgroud)
您可以"忘记"放置括号/括号,并将其称为:
foo :param => value, :param2 => value
Run Code Online (Sandbox Code Playgroud)
Ruby会填写空白并理解你要完成的是:
foo({:param => value, :param2 => value})
Run Code Online (Sandbox Code Playgroud)
现在,对于你的问题:link_to需要两个可选的哈希 - 一个被调用options,另一个被调用html_options.你可以想象它是这样定义的(这是近似值,它要复杂得多)
def link_to(name, options, html_options)
...
end
Run Code Online (Sandbox Code Playgroud)
现在,如果你这样调用它:
link_to 'Comments', :name => 'Comments'
Run Code Online (Sandbox Code Playgroud)
Ruby会有点困惑.它会尝试为你"填空",但不正确:
link_to('Comments', {:name => 'Comments'}, {}) # incorrect
Run Code Online (Sandbox Code Playgroud)
它会认为该name => 'Comments'部分属于选项,而不是html_options!
你必须自己填补空白来帮助红宝石.将所有括号放在适当的位置,它将按预期运行:
link_to('Comments', {}, {:name => 'Comments'}) # correct
Run Code Online (Sandbox Code Playgroud)
如果需要,您实际上可以删除最后一组括号:
link_to("Comments", {}, :name => "comments") # also correct
Run Code Online (Sandbox Code Playgroud)
但是,为了使用html_options,您必须保留第一组括号.例如,您需要为包含确认消息和名称的链接执行此操作:
link_to("Comments", {:confirm => 'Sure?'}, :name => "comments")
Run Code Online (Sandbox Code Playgroud)
其他轨道助手具有类似的结构(即form_for,collection_select),所以你应该学习这种技术.有疑问,只需添加所有括号.
the*_*eIV 14
如果你想通过rails,我建议content_tag(docs).
例:
content_tag(:a, 'Comments', :name => 'comments')
Run Code Online (Sandbox Code Playgroud)