Не удается подавить вывод во вспомогательном блоке помощника в рельсах 3 - PullRequest
1 голос
/ 04 декабря 2010

Это своего рода скручивание моей лапши.

У меня есть что-то похожее на это (в двигателе 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, просто не могу решить эту проблему.

1 Ответ

2 голосов
/ 04 декабря 2010

Если вы измените вспомогательный метод для передачи в self, который будет текущим экземпляром представления, а затем используете его для захвата, у вас может не быть этой проблемы.Замените использование помощника на предоставленный экземпляр представления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...