Отрисовка блока content_for в помощнике

Я пытаюсь отобразить результат блока content_for через помощник.

У меня есть шаблон (HAML) и макет следующим образом:

# app/views/books/show.html.haml
-content_for(:page_header) do
     %h1= @book.title

# app/views/application.html.haml
...
=yield(:page_header) 
...

Это работает абсолютно нормально.

Вместо этого я хочу сделать этот вызов помощником. Итак, я стремлюсь к следующему:

# app/views/books/show.html.haml
-content_for(:page_header) do
     %h1= @book.title

# app/views/application.html.haml
....
=page_header(block)
....

# app/helpers/application.rb
....
def page_header(&block)

    # Some view logic
    # ...

    =yield(:page_header)
end
....

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

# app/views/application.html.haml
=page_header { yield(:page_header) }

# app/helpers/application.rb
def page_header(&block)
  yield
end

но это кажется мне уродливым.

Любые идеи? Заранее спасибо.

ОТВЕТ: снова используйте content_for(:page_header) для отображения.


person iHiD    schedule 21.07.2011    source источник


Ответы (1)


Возможно, вы захотите взглянуть на захват, чтобы получить вывод в виде строки, а затем использовать его. Вот как: http://api.rubyonrails.org/classes/ActionView/Helpers/CaptureHelper.html#method-i-capture

person Sohan    schedule 21.07.2011
comment
Спасибо за Ваш ответ. Это указало мне на правильное решение, которое заключается в том, чтобы снова использовать content_for для рендеринга контента. - person iHiD; 22.07.2011