代码之家  ›  专栏  ›  技术社区  ›  Brettski

轨道中-%>和%>之间的差异[重复]

  •  57
  • Brettski  · 技术社区  · 17 年前

    我已经开始学习一些rails教程,并注意到一些视图代码块如下

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

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

    -%>之间的区别是什么;%>;

    4 回复  |  直到 16 年前
        1
  •  83
  •   zenazn    17 年前

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

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

    它将产生:

    <div>
      Hi
    </div>
    

    而不是这个:

    <div>
    
      Hi
    
    </div>
    
        2
  •  5
  •   gylaz    13 年前

    我很确定 - %> 不再需要,应该被排除在外。

    至少在Chrome中,使用以下命令生成的html看起来是一样的 -%> %> .

        3
  •  4
  •   James Conroy-Finn    17 年前

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

        4
  •  3
  •   Community Mohan Dere    9 年前

    更新:此答案错误,请参阅 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
    

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

    http://api.rubyonrails.org/classes/ActionView/Base.html

    然而,Rails 4.1确实删除了文档中的尾随空格,而纯ERB则没有,因此可能还有其他差异。

    此外,它并没有删除文档中的主要换行符:这可能是一个文档错误。在以下网址打开了一个问题: https://github.com/rails/rails/issues/16766