erb: вывод повторяется, если шаблон содержит определение метода - PullRequest
0 голосов
/ 15 сентября 2009

Я ожидал, что слово «test» появится в выходных данных один раз, а слово «hello» появится один раз.

Но я озадачиваюсь тем фактом, что если я это сделаю, слово "test" будет отображаться дважды

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

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

<%= helo %>

Полагаю, есть простое объяснение этому, связанное с какой-то причудой эрба?

1 Ответ

1 голос
/ 15 сентября 2009

Я попробовал:

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

И у меня это сработало.

...