无法抑制rails 3中嵌套块助手的输出

时间:2010-12-04 05:47:43

标签: ruby-on-rails ruby-on-rails-3

这个有点扭曲我的面条。

我有类似的东西(如果重要的话,在轨道3引擎中)

class Builder
  def initialize
    @foos = []
  end

  def foo(&block)
    @foos << helper.capture(&block) #helper being a class that is including ActionView::Helpers
  end

  def to_html
    @foos.join "\n"
  end
end

module ApplicationHelper
  def widget
    b = Builder.new
    yield b

    b.to_html
  end
end

#in a view somewhere
<%= widget do |b| %>
  <% b.foo do %>
    static content
  <% end %>
<% end %>

一切都很好,但是嵌套的静态内容会输出两次 - 一次是我想要的,一次是调用widget

根据我的阅读,capture应该处理这个确切的问题。我很确定问题源于我如何调用capture(来自包含ActionView::Helpers的虚拟代理类),但问题是b.foo调用是在类实例上调用方法,而不是从将混合到模板中的内容的上下文。

有没有办法解决这个问题?或者我是从错误的方向接近这个。我试图模拟一些相当复杂的东西,我对api非常满意,似乎无法通过这个问题。

1 个答案:

答案 0 :(得分:2)

如果修改helper方法以传入self(即当前视图实例),然后使用它来捕获,则可能没有此问题。将您对助手的使用替换为提供的视图实例。

相关问题