某些rails命令比直接HTML更有用

时间:2011-11-27 21:55:31

标签: html ruby-on-rails-3

有人可以解释为什么我会使用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 %>              

背景 - 我正在模板中更改此内容并停止思考为什么我这样做了?

3 个答案:

答案 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”,或自动包含应用程序上下文,或引入资产管道。

对于最简单的使用案例,往往很少或根本没有任何好处,但这不是帮助者发光的地方 - 当事情变成奶牛腿时,“原始”形式包含逻辑太大而无法保留在主线中模板。

将它们用于简单的用例可以使事情保持一致,并使模板更容易适应变化。