erb:如果模板包含方法定义,则输出重复

时间:2009-09-15 04:13:31

标签: ruby-on-rails ruby erb

我希望看到输出中出现“test”一词,并出现“hello”一词。

但令我感到困惑的是,如果我这样做,单词“test”会显示两次

<div>
  <h3>test</h3>
</div>

<% def helo %>
 <% "hello" %>
<% end %>

<%= helo %>

我假设有一个简单的解释,这与erb的一些怪癖有关吗?

1 个答案:

答案 0 :(得分:1)

我试过了:

require 'erb'

template = %q{
    <div>
      <h3>test</h3>
    </div>

    <% def helo %>
      <% "hello" %>
    <% end %>

    <%= helo %>
}

t = ERB.new(template)
puts t.result

#(erb):6:in `helo': undefined local variable or method `_erbout' for main:Object (NameError) from (erb):10

所以你提到的似乎是正确的,但总的来说,你可以轻易地欺骗它:

require 'erb'

template = %q{
    <div>
      <h3>test</h3>
    </div>

    <% def helo
      "hello"
    end %>

    <%= helo %>
}

message = ERB.new(template)
puts message.result

它对我有用。