Ruby on Rails 3: игра с представлениями - PullRequest
0 голосов
/ 21 августа 2011

Прошу прощения за мой плохой английский. Я просто пытаюсь описать свой вопрос. :) У меня есть макет приложения, который имеет выход для отображения сообщения в теле. У меня есть еще один выход: footerpost3 для отображения заголовка последнего сообщения в нижнем колонтитуле.

Когда я в localhost: 3000, yield: footerpost3 правильно отображает недавний заголовок. но когда я нажимаю на ссылку поста, URL которой является localhost: 3000 / posts / 3, yield: footerpost3 ничего не показывает

Вот мой код: Приложение / просмотров / макет / application.html.erb

<!-- begin footer comment widget -->
  <div class="footer_list widget_recent_comments">
    <div class="title"><h5>Artikel Terkini</h5></div>
      <%= yield :footerpost3 %>             
    </div>
<!-- end footer comment widget -->

Приложение / просмотров / магазин / index.html.erb

<% content_for :footerpost3 do %>
    <% @postsMain.each do |dopostAll| %>
        <div class="entry">
            <ul>
                <li class="recentcomments"><%= link_to dopostAll.title, dopostAll %></li>
            </ul>
        </div>                          
    <% end %>
<% end %>

Надеюсь, мой вопрос легко понять ..:)

Ответы [ 2 ]

0 голосов
/ 21 августа 2011

Похоже, ваш корневой URL-адрес stores#index.Вы должны инициализировать @postsMain в действии stores#index и генерировать content_for footerpost3 в stores/index.html.erb.

Когда вы щелкнете по сообщению, вы попадете на posts#show page.Таким образом, вы должны инициализировать @postsMain даже в действии posts#show и генерировать содержимое для footerpost3 даже в posts/show.html.erb

0 голосов
/ 21 августа 2011

Ответ есть в вашем вопросе.Вы определяете «содержимое для» footerpost3 в этом блоке, который существует в index.html.erb.Когда вы используете /posts/3, index.html.erb не отображается, а show.html.erb - это.

Чтобы решить эту проблему, вам также необходимо добавить содержимое в шаблон show.html.erb.

Вы можете решить эту проблему несколькими способами.Использование вложенных макетов будет одним из них.Например, вы можете создать макет сообщений на app/views/layout/posts.html.erb, например:

<% content_for :footerpost3 do %>
    <% @postsMain.each do |dopostAll| %>
        <div class="entry">
            <ul>
                <li class="recentcomments"><%= link_to dopostAll.title, dopostAll %></li>
            </ul>
        </div>                          
    <% end %>
<% end %>

<%= render :file => 'layouts/application' %>

Таким образом, все представления вашего PostsController будут использовать этот макет, который просто добавляет содержимое нижнего колонтитула, а затем отображаетapplication_layout.

...