在rails中 – %>和%>之间的差异
我已经开始了一些rails教程,并注意到一些视图代码块就像
<h1><%= @subject.name -%></h1>
和其他的代码块是一样的
<h1><%= @subject.name %></h1>
– %>和%>之间有什么区别?
如果你知道一些很好的语法参考,你可以指点我,这也是有帮助的。
额外的短划线使得ERB在结束标签之后不输出换行符。 你的例子没有什么区别,但是如果你有这样的东西:
<div> <% if true -%> Hi <% end -%> </div>
它会产生:
<div> Hi </div>
而不是这个:
<div> Hi </div>
我很确定-
在%>
不再需要之前,应该省略。
至less在Chrome中,使用-%>
或%>
生成的html看起来相同。
如果您使用HAML而不是ERB,则可以使用小于或大于符号的方式执行类似于标记之后的操作。
>
将删除标签周围的任何空格, <
将删除其中的任何空格。
.float-left< %p Lorem ipsum dolor sit amet
被编译为:
<div class="float-left"><p> Lorem ipsum dolor sit amet </p></div>
和…
%left_tag %inside> %right_tag
被编译为:
<left_tag /><inside /><right_tag />
如果你不使用HAML,那绝对值得一试。
更新:这个答案是错误的,请参阅https://stackoverflow.com/a/25626629/895245 。
在Ruby 2.1中(不一定要用Rails), -
删除一个尾随的换行符:
- 换行符必须是
>
之后的第一个字符 - 没有空格被删除
- 只有一个换行符被删除
- 你必须通过
'-'
选项来使用它
例子:
require 'erb' ERB.new("<%= 'a' %>\nb").result == "a\nb" or raise begin ERB.new("<%= 'a' -%>\nb").result; rescue SyntaxError ; else raise; end ERB.new("<%= 'a' %>\nb" , nil, '-').result == "a\nb" or raise ERB.new("<%= 'a' -%>\nb" , nil, '-').result == 'ab' or raise ERB.new("<%= 'a' -%> \nb" , nil, '-').result == "a \nb" or raise ERB.new("<%= 'a' -%>\nb" , nil, '-').result == 'ab' or raise ERB.new("<%= 'a' -%>\n\nb", nil, '-').result == "a\nb" or raise
文件: http : //ruby-doc.org/stdlib-2.1.1/libdoc/erb/rdoc/ERB.html
Rails 4.1在http://api.rubyonrails.org/classes/ActionView/Base.html上logging了这一点,并且似乎是:;
-
默认使用ERB: https : //github.com/rails/rails/blob/fcbdac7e82725c388bf5adf56a9a9a16d4efdbe0/actionview/lib/action_view/template/handlers.rb#L10
-
设置
-
默认在: https : //github.com/rails/rails/blob/fcbdac7e82725c388bf5adf56a9a9a16d4efdbe0/actionview/lib/action_view/template/handlers/erb.rb#L77
然而,Rails 4.1确实删除了尾随的空白,而纯粹的ERB没有,所以可能有其他的区别。
另外,它并没有像文档中那样去除前面的换行符:它可能是一个文档错误。 在https://github.com/rails/rails/issues/16766打开了一个问题;