Я хочу сделать "content_for" * дважды * в один и тот же блок yield -> как? - PullRequest
9 голосов
/ 24 октября 2011

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

поэтому у меня обычно будет что-то вроде:

<html>
  <head>
    <title><%= @page_title %></title>
    <%= yield :head %>
  </head>
...etc

и частично 1:

<% content_for :head do %>
      <%= javascript_tag 'partial_one_js' %>
<% end %>

и частично 2:

<% content_for :head do %>
      <%= javascript_tag 'partial_two_js' %>
<% end %>

НоВ зависимости от того, что определено, второе удаляет содержимое, поступающее от первого.

Невозможно объединить партиалы.

Я хотел бы иметь возможность объединить их, не совершая что-то совершенно хакерское.Это также должно работать, если присутствует только один или ни один из них.

... и я бы особенно предпочел избежать:

<html>
  <head>
    <title><%= @page_title %></title>
    <%= yield :head_one %>
    <%= yield :head_two %>
  </head>

... ick

Так... у кого-нибудь есть решение?

1 Ответ

19 голосов
/ 25 октября 2011

Используйте content_for для извлечения сохраненного содержимого вместо yield.

<html>
  <head>
    <title><%= @page_title %></title>
    <%= content_for :head %>
  </head>
...etc

Из исходных документов :

# Note that content_for concatenates the blocks it is given for a particular
# identifier in order. For example:
#
#   <% content_for :navigation do %>
#     <li><%= link_to 'Home', :action => 'index' %></li>
#   <% end %>
#
#   <%#  Add some other content, or use a different template: %>
#
#   <% content_for :navigation do %>
#     <li><%= link_to 'Login', :action => 'login' %></li>
#   <% end %>
#
# Then, in another template or layout, this code would render both links in order:
#
#   <ul><%= content_for :navigation %></ul>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...