Обертывание блока Rails 3 в другой помощник - PullRequest
0 голосов
/ 23 марта 2012

Я хочу создать такого помощника (я использую Formtastic gem):

def admin_form_for(record, columns = nil, &block)
  semantic_form_for [:admin, record] do |f|
    f.semantic_errors
    f.inputs *columns if columns
    capture(f, &block) if block_given?
    f.buttons
  end
end

Я пытаюсь обернуть вспомогательный блок admin_form_for, где мы затем вызываем некоторые методы, которые выводят текст, а затем захватывают блок ERB в его середине.

Я пробовал все виды вещей

capture(f, &block) if block_given?

и

yield f if block_given?

и

concat(capture(f, &block)) if block_given?

похоже, ничего не работает.

Использование help в конечном итоге выглядит следующим образом:

<%= admin_form_for @record, [:name, :email] do |f| %>
  <p><%= some_other_helper %></p>
<% end %>

Ответы [ 2 ]

0 голосов
/ 23 апреля 2013

Я знаю, что это на месяц позже, но я думаю, это то, что вы ищете:

def admin_form_for(record, columns = nil, &block)
  with_output_buffer do  
    semantic_form_for [:admin, record] do |f|
      f.semantic_errors
      f.inputs *columns if columns
      capture(f, &block) if block_given?
      f.buttons
    end
  end
end

Здесь with_output_buffer возвращает строку, представляющую содержимое, отображаемое переданным блоком.

0 голосов
/ 23 марта 2012

Извините, не проверял, но вы можете попробовать это:

def admin_form_for(record, columns = nil, &block)
  semantic_form_for [:admin, record] do |f|
    f.semantic_errors
    f.inputs *columns if columns
    f.semantic_fields_for(columns, &block) if columns && block_given?
    f.buttons
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...