- %>之间的差异和%>在铁轨

时间:2009-06-15 23:37:45

标签: ruby-on-rails

我已经开始了一些rails教程,并注意到一些视图代码块就像

<h1><%= @subject.name -%></h1>

和其他代码块类似

<h1><%= @subject.name %></h1>

- %&gt;之间有什么区别?和%&gt;

如果你知道一些好的语法参考,你可以指点我,这也会有所帮助。

4 个答案:

答案 0 :(得分:83)

额外的破折号使ERB在结束标记之后不输出换行符。你的例子没有区别,但如果你有这样的东西:

<div>
  <% if true -%>
  Hi
  <% end -%>
</div>

它会产生:

<div>
  Hi
</div>

而不是这个:

<div>

  Hi

</div>

答案 1 :(得分:5)

-不再需要之前,我非常确定%>,并且应该被排除在外。

至少在Chrome中,使用-%>%>生成的html看起来相同。

答案 2 :(得分:4)

如果您使用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,那绝对值得一试。

答案 3 :(得分:3)

更新:答案错误,请改为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' -%>\n b" , nil, '-').result == 'a b'   or raise
ERB.new("<%= 'a' -%>\n\nb", nil, '-').result == "a\nb"  or raise

Doc:http://ruby-doc.org/stdlib-2.1.1/libdoc/erb/rdoc/ERB.html

Rails 4.1在http://api.rubyonrails.org/classes/ActionView/Base.html处对此进行了记录,并显示为:

但是,Rails 4.1确实删除了所记录的尾随空格,而纯ERB则没有,因此可能存在其他差异。

此外,它没有删除所记录的主要换行符:它可能是文档错误。在https://github.com/rails/rails/issues/16766

处打开了一个问题