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 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access