【问题标题】:Difference between -%> and %> in rails [duplicate]rails中-%>和%>之间的区别[重复]
【发布时间】:2010-11-03 04:40:01
【问题描述】:

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

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

和其他代码块一样

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

-%> 和 %> 有什么区别

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

【问题讨论】:

  • 这个是在被引用之前被问到的。虽然我相信我们的版主知道他们在做什么。

标签: ruby-on-rails


【解决方案1】:

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

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

它会产生:

<div>
  Hi
</div>

不是这个:

<div>

  Hi

</div>

【讨论】:

  • 非常感谢!我首先通过查找允许特殊字符的搜索引擎,然后通过搜索 -%> 找到了这一点。这是出现的第一页。我使用了symbolhound.com(我现在可能会经常使用它,因为在 Google 上搜索特殊符号是不可能的)。
  • 确保在独立的 ruby​​ 脚本中使用 ERB 时将 trim_mode 传递给 ERB.new,例如ERB.new('myfile.erb', nil, '-') 其中'-'trim_mode,否则它不会接受破折号
  • 这让我在尝试通过管道连接到 erb 命令行工具时感到意外。作为@Koen。声明设置修剪模式解决了这个问题,并且该命令有一个设置它的选项,即 (erb -T '-')。
【解决方案2】:

我很确定 - 之前的 %&gt; 不再需要,应该被排除在外。

至少在 Chrome 中,使用 -%&gt;%&gt; 生成的 html 看起来是一样的。

【讨论】:

  • 我在纯 Ruby 2.1 和 Rails 4.1 中都没有重现:要删除换行符,我需要 -trim_mode &lt;&gt;(Rails 似乎没有默认设置) .
【解决方案3】:

如果您使用 HAML 而不是 ERB,您可以在标记后使用小于或大于符号执行类似操作。

&gt; 将删除标签周围的所有空格,&lt; 将删除其中的所有空格。

.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,那么绝对值得一试。

【讨论】:

    【解决方案4】:

    更新:这个答案是错误的,请参阅https://stackoverflow.com/a/25626629/895245


    在 Ruby 2.1(不一定使用 Rails)中,- 删除了一个尾随换行符:

    • 换行符必须是&gt; 之后的第一个字符
    • 没有删除空格
    • 只删除一个换行符
    • 必须通过'-' 选项才能使用它

    例子:

    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
    

    文档: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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-16
    • 2011-04-08
    • 2012-11-24
    • 2013-06-05
    • 2021-09-29
    • 2020-05-27
    相关资源
    最近更新 更多