Action View templates can be written in several ways. If the template file
has a .erb extension then it uses a mixture of ERB (included
in Ruby) and HTML. If the template file has a
.builder extension then Jim Weirich's Builder::XmlMarkup
library is used.

ERB

You trigger ERB by using embeddings such as <% %>, <% -%>, and
<%= %>. The <%= %> tag set is used when you want output.
Consider the following loop for names:

The loop is setup in regular embedding tags <% %> and the name is
written using the output embedding tag <%= %>. Note that this is not
just a usage suggestion. Regular output functions like print or puts
won't work with ERB templates. So this would be wrong:

<%# WRONG %>
Hi, Mr. <% puts "Frodo" %>

If you absolutely must write from within a function use
concat.

<%- and -%> suppress leading and trailing whitespace, including the
trailing newline, and can be used interchangeably with <% and %>.

Using sub templates

Using sub templates allows you to sidestep tedious replication and extract
common display structures in shared templates. The classic example is the
use of a header and footer (even though the Action Pack-way would be to use
Layouts):

As you see, we use the output embeddings for the render methods. The render
call itself will just return a string holding the result of the rendering.
The output embedding writes it to the current template.

But you don't have to restrict yourself to static includes. Templates
can share variables amongst themselves by using instance variables defined
using the regular embedding tags. Like this:

<% @page_title = "A Wonderful Hello" %>
<%= render "shared/header" %>

Now the header can pick up on the @page_title variable and use
it for outputting a title tag:

<title><%= @page_title %></title>

Passing local variables to sub templates

You can pass local variables to sub templates by using a hash with the
variable names as keys and the objects as values:

By default, Rails will compile each template to a method in order to render
it. When you alter a template, Rails will check the file's modification
time and recompile it in development mode.

Builder

Builder templates are a more programmatic alternative to ERB. They are
especially useful for generating XML content. An XmlMarkup object named
xml is automatically made available to templates with a
.builder extension.