Создание общего заголовка HTML с блоками в Rails - PullRequest
1 голос
/ 21 октября 2009

Я хочу сделать что-то подобное в моих взглядах:

<% 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

Однако это не работает. Когда я даю блок, он делает правильно. Однако без блока он ничего не рендерит, даже по умолчанию.

Мне не хватает чего-то простого, чтобы это исправить, но я не уверен, что.

Ответы [ 2 ]

1 голос
/ 22 октября 2009

Разве вызов блока не должен быть внутри тега content_tag?, Например:

# 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) +
    block_given? ? block.call : '' 
  end)

end
0 голосов
/ 21 октября 2009

Вы можете сделать что-то вроде этого

def page_header(title, &block)
  concat( render :partial=>"shared/page_header",:locals=>{:title=>title,:body=> capture(&block)})
end

внутри частичного _page_header.erb

 <div class='page-header'>
  <h2> <%= title %> </h2>
   <%= body %>
 </div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...