Layouts
Back in Example 2-1,
you saw that the view Rails originally generated only included an
h1 element and a p element—Rails didn’t provide a full HTML
document, with a DOCTYPE, html element, or head and body elements. Part of the reason for that is
that Rails expects its views to work as part of a system, a system in
which another document, a layout, provides all of that supporting
infrastructure. Rails didn’t automatically generate a layout, but
creating one is easy.
Note
When Rails generates more complete scaffolding code (described in Chapter 5), it does produce a layout file. It just doesn’t normally do it when generating a controller and view.
Splitting View from Layout
The final version of the Hello view, still using the simple controller from Example 2-4, looks like Example 3-3.
Example 3-3. The Hello view, containing markup that can move to a layout
<html>
<head><title><%=h @message %> </title>
<%= stylesheet_link_tag 'hello', :media => "all", :type => "text/css",
:href => "/stylesheets/" %>
</head>
<body>
<h1><%=h @message %></h1>
<p>This is a greeting from app/views/hello/index.html.erb</p>
<% for i in 1..@count %>
<p><%=h @bonus %></p>
<% end %>
</body>
</html>To make this into a layout, break the view down into two files. The first, listed in Example 3-4, contains the logic specific to presenting that page, while the second, Example 3-5, contains the broader framing for the document. (Both are included in ch03/hello005.)
Example 3-4. The Hello view, reduced to its local ...