Вывод content_for не генерируется в нужной позиции в HTML

Рельсы: 3.0.11

Ruby: ruby ​​1.9.3dev (версия 33323 23 сентября 2011 г.) [i686-linux]

Это мой пользовательский файл макета:

custom_layout.html.haml

!!!
%html{ :xmlns => "http://www.w3.org/1999/xhtml", :"xml:lang" => "en", :lang => "en" }
  %head
    %meta{ :"http-equiv" => "Content-Type", :content => "text/html; charset=utf-8" }
    %title= SERVICE_NAME
    = render "shared/js_and_css"
  %body
    #wrapper.container_12
      #main.grid_12
        .grid_9.omega
          - flash.each do |name, message|
            = content_tag :p, message, :id => "flash_#{name}"
          = yield
        = yield :side_nav

    = render "layouts/footer"

Просмотреть файл: personal_information.html.erb

<div class="c1">
  <div class="c2">
    <div class="headings">
      <h1><%= t("general.edit_personal_information")%></h1>
    </div>
    <div class="info-area">
      <%= form_for @user, :html => { :multipart => true, :id => "user_form" }  do |f| %>
         <%= render :partial => "form", :object => f %>
      <% end %>
    </div>
  </div>
</div>

<% content_for :side_nav do %>
  <%= '<div class="grid_3 alpha">&nbsp;</div>'.html_safe  %>
<% end %>

Сгенерированный HTML:

<body>
    <div class="container_12" id="wrapper">
        <div class="grid_12" id="main">
            <div class="grid_9 omega">
                <div class="c1">
                  <div class="c2">
                    <div class="headings">
                        <h1>Edit profile</h1>
                    </div>
                    <div class="info-area">
                        <form>
                            <!-- FORM ELEMENTS HERE -->
                        </form>
                      </div>
                 </div>
                </div>     
            </div>
        </div>
    </div>
    <div class="grid_3 alpha">&nbsp;</div>
</body>

Контент, заданный с помощью content_for :side_nav, отображается ПОСЛЕ div id="wrapper", а не после div class="grid_9 omega". Может ли кто-нибудь объяснить, что вызывает это странное поведение и как я могу это исправить?


person Jignesh Gohel    schedule 17.08.2012    source источник


Ответы (1)


Вам не хватает = — вы просто оцениваете код, но не назначаете его представлению. Это должно исправить это:

<%= content_for :side_nav do %>
  <%= '<div class="grid_3 alpha">&nbsp;</div>'.html_safe  %>
<% end %>

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

<%= content_for :side_nav do %>
  <div class="grid_3 alpha">&nbsp;</div>
<% end %>
person Thilo    schedule 17.08.2012
comment
ваше предложение не сработало. Оно генерирует тот же результат, что и в моем вопросе выше. - person Jignesh Gohel; 20.08.2012