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 ...
Get Learning Rails now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.