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/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 ...
Get Learning Rails: Live Edition 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.