O'Reilly logo

Learning Rails: Live Edition by Edd Dumbill, Simon St. Laurent

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

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 ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required