Back in Example 2-1, you saw that the view
Rails originally generated only included an
p element—Rails didn’t provide a full
HTML document, with a
html element, or
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.
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
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/hello.css" %> </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 ...