Rails ERb最佳实践(<% %> vs <% -%> vs <%- -%>)

20
在Rails中,当涉及到<% %>(执行Ruby代码)、<% -%>(执行Ruby代码,抑制尾随换行符)和<%- -%>(执行Ruby代码,抑制尾随换行符和前导空格)时,如何推荐使用ERb?似乎<%- -%>会使输出的HTML看起来更好,但我大多数情况下看到的是<% %>

在我看来,HTML的“美观”并不是很重要,只要生成的HTML有一些可见的缩进结构,我就不会费心去抑制换行等。 - Zabba
1
我认为在Rails 3中<% %>和<%- %>是同义词(没有尾随换行符)。 - raidfive
9
我认为你正在“刮牦牛”的路上。(注:指无意义的行动)编程时需要担心的事情很多,但生成的HTML是否好看并不是要做的可以产生重大影响的事情之一。但是不要感到难过,因为你并不孤单,我们都会这样做。 - the Tin Man
@Greg,感谢你教我“剃牦牛毛”的术语,点赞! - jrdioko
LOL。是的。了解到有一个术语来形容这种行为,感觉有点不舒服。我一直以为它叫做拖延症。现在去看《蓝皮鼠和大脑门》的节目找找吧。 :-) - the Tin Man
不要低估整洁、易读且易于调试的代码对开发者追求优雅的影响。在我看来,剃牦牛的结果可能是一些人维护您的网站的主要动力因素。然而,肯定有更有效的方法可以使HTML更易读,而不是通过手动调整ERB来实现。 - aef
3个回答

10

这是个人偏好。在编写循环或块时,我使用 <% %>,因为我想要新的行。在变量赋值的极少数情况下,我会使用 <% -%>。我从不使用<%- -%>,因为这是太多选项之一。


1
<%- if foo? -> 在 Rails 生成器模板中正是您想要的。 - Chris Beck

7

我刚刚在http://ruby-doc.org/ruby-1.9/classes/ERB.html上读到,即使是单行代码(如果该行没有其他内容),您甚至可以使用一个百分号。

来自文档的示例:

<%# ignore numerous minor requests -- focus on priorities %>
% priorities.each do |priority|
  * <%= priority %>
% end

几乎像HAML一样,不是吗? :)

1
我认为结尾的连字符-%>已经不再起作用了;当我尝试在Ruby 2.6.6中使用它时,出现了错误。然而,@onetom建议仅使用一个百分号%来表示整行代码,它不会输出任何内容,并且不会保留末尾的不需要的换行符。
示例:

尾随连字符

line1
<%- sought = 'pattern' -%>
line3

错误信息:

file.erb:1: syntax error, unexpected ';' (SyntaxError)
; - sought = 'pattern' -; _erbout.<< "\n".freeze

无结尾连字符:
line1
<%- sought = 'pattern' %>
line3

输出:

line1

line3

仅百分比:

line1
% sought = 'pattern'
line3

输出:

line1
line3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接