在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打开了一个问题;