So, when you go to the index
page you will get the piece of html that will be placed in the main layout, and this piece of html look like this:
<div class="container">
<%= render 'admins/menu' %>
<%= yield :admin %>
</div>
This code will yield :admin
properly.
When you go to the test
page you do not have this html code anymore (since it only belongs to the index
method). So, anything you put in the content_for(:admin)
block will be ignored since no-one is printing it.
What you probably want to do is creating a shared layout for all your admin pages. Follow this guide and you'll have your solution.
Solution
Edit the application.html.erb
layout using this:
<%= content_for?(:content) ? yield(:content) : yield %>
instead of
<%= yield %>
Then create an admins.html.erb
file inside the layouts
folder to handle your admin pages' layout. Something like this:
<% content_for :content do %>
<div class="container">
<%= render 'admins/menu' %>
<%= yield %>
</div>
<% end %>
<%= render template: "layouts/application" %>
Will do fine. Then in the index.html.erb
and test.html.erb
just place regular HTML content, without using the content_for(:admin)
block. Everything should work fine and you'll have your custom admin template, with a slightly different look from regular pages.