我已经开始了一些rails教程,并注意到一些视图代码块就像
<h1><%= @subject.name -%></h1>
和其他代码块类似
<h1><%= @subject.name %></h1>
- %&gt;之间有什么区别?和%&gt;
如果你知道一些好的语法参考,你可以指点我,这也会有所帮助。
答案 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
处打开了一个问题