Я хочу сделать что-то подобное в моих взглядах:
<% page_header "Your Posts" do %>
<div class="add">
<%= link_to 'Add a new post', new_posts_path %>
</div>
<% end %>
И пусть HTML-код выглядит примерно так:
<div class="page_header">
<h2>Your Posts</h2>
<div class="add">
<a href="/posts/new">Add a new post</a>
</div>
</div>
Однако иногда я не хочу иметь никакого дополнительного содержимого, а просто отображаю HTML:
<div class="page_header">
<h2>Your Posts</h2>
</div>
Вместо двух методов я хочу использовать блок для рендеринга дополнительного контента, если он задан, или просто заголовок, если его нет; таким образом я могу использовать общий вызов во всех моих представлениях, чтобы сохранить мой код СУХИМЫМ.
В Application Helper есть следующий код, но, похоже, он ничего не рендерит:
# Renders a div for the page header with an H2 tag representing the page title
# If a block is provided, renders that content within the page header DIV
def page_header(title, &block)
concat(content_tag(:div, :class => "page_header") do
content_tag(:h2, title)
end)
block.call if block_given?
end
Однако это не работает. Когда я даю блок, он делает правильно. Однако без блока он ничего не рендерит, даже по умолчанию.
Мне не хватает чего-то простого, чтобы это исправить, но я не уверен, что.