有人可以解释为什么我会使用rails link_to等而不是直接的HTML代码吗?鉴于他们一旦到达浏览器就会呈现相同的内容 - 这里的实际好处是什么?
<a href="index.html"><img id="logo" src="images/logo.png" alt="logo" /></a>
<%= link_to image_tag("logo.png", :alt => "logo", :id => "logo"), root_path %>
背景 - 我正在模板中更改此内容并停止思考为什么我这样做了?
答案 0 :(得分:3)
这是一个很好的问题。我认为使用rails link_to
方法以及其他html帮助方法更好。在这种情况下,它可能没有明显的优势,但更多的是它没有。以下是一些有用的案例:
更改路线
如果您有指定路线,请说foo_path
指向/foo
。您可以使用<a href='/foo'>
,但如果您想更改foo_path
以路由到/foo_bar
,则必须浏览每个视图并手动更改链接。
<强>变量强>
通常需要链接的变量。 <%= link_to @foo.name, foo_path %>
比<a href='/foo'><%= @foo.name %></a>
外观和可维护性
根据我的经验,使用辅助方法的视图代码往往看起来更好,更容易重构和维护。
答案 1 :(得分:3)
在Rails 3.1中,使用辅助方法将使用asset pipeline。对于URL,这意味着图像后缀为校验和(这称为指纹识别,至少在上面链接的Rails指南中)。这允许将HTTP服务器缓存过期设置为最大值 - 如果文件内容更改,则将导致另一个文件名,从而强制重新下载文件。否则,它将从浏览器缓存中提供。
此外,如果您在配置中指定资产主机,则帮助方法将使用此信息 - 请查看documentation for image_url
。
至于link_to,我想你也可以做<a href="<%= root_path %>">Link</a>
之类的事情,但在我看来,使用ruby代码会更优雅。
您永远不应该在HTML中对网址进行硬编码 - 它可能会发生变化,您真的不想浏览源代码并将所有对index.html
的引用更改为home.html
或类似的内容。
答案 2 :(得分:1)
帮助程序在功能上暴露您不一定总是使用,例如“:remote =&gt; true”,或自动包含应用程序上下文,或引入资产管道。
对于最简单的使用案例,往往很少或根本没有任何好处,但这不是帮助者发光的地方 - 当事情变成奶牛腿时,“原始”形式包含逻辑太大而无法保留在主线中模板。
将它们用于简单的用例可以使事情保持一致,并使模板更容易适应变化。