如何在不渲染的情况下从ERB代码块中产生?

时间:2013-12-17 08:20:56

标签: ruby-on-rails ruby erb

请考虑以下事项:

view.html.erb

<%= make_backwards do %>
  stressed
<% end %>

helper.rb

def make_backwards
  yield.reverse
end

视图呈现stresseddesserts而非desserts。如何在不渲染代码块的情况下使用yield中的内容?

2 个答案:

答案 0 :(得分:5)

ERB有一个内部缓冲区,这使得使用块变得更复杂,正如您在代码示例中所看到的那样。

Rails提供了一个capture方法,它允许您捕获此缓冲区内的字符串并从块中返回。

所以你的助手会变成以下:

def make_backwards
  capture do
    yield.reverse
  end
end

答案 1 :(得分:1)

你可以尝试做ff:

选项1:

<%= make_backwards { "stressed" } %>

选项2:

<%= make_backwards do %>
  <% "stressed" %>
<% end %>

如果有帮助,请告诉我。