Это своего рода скручивание моей лапши.
У меня есть что-то похожее на это (в двигателе rails 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
должно решить именно эту проблему. Я почти уверен, что проблема связана с тем, как я вызываю захват (из фиктивного прокси-класса, который включает ActionView::Helpers
), но проблема в том, что вызов b.foo
вызывает метод для экземпляра класса, а не из контекста это будет смешано с шаблоном.
Есть ли способ обойти эту проблему? Или я подхожу к этому с неправильного направления. Я пытаюсь смоделировать что-то довольно сложное и действительно доволен API, просто не могу решить эту проблему.