Rails 3 View
Helpers are intended to generate complicated markup for use in the associated views.
Layouts
- The default layout for the entire application is
app/views/layouts/application.html.erb
. - If controller-specific layouts are found, they are used instead.
- You can use the layout directive at the class level in any controller (that is, not inside an action) to set the layout for the entire controller:
layout 'my_layout'
- You can include a layout for a specific action with an explicit call to render inside the action:
render :layout => 'my_layout'
- Sometimes, you want to render an action without a layout. In that case, you can pass false in place of the layout name:
render :layout => false
Form Example
<%= form_for(@article) do |f| %>
<% if @article.errors.any? %>
<div id="errorExplanation">
<h2><%= pluralize(@article.errors.count, "error") %>
prohibited this article from being saved:</h2>
<ul>
<% @article.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= f.label :title %><br />
<%= f.text_field :title %>
</div>
<div class="field">
<%= f.label :location %><br />
<%= f.text_field :location %>
</div>
<div class="field">
<%= f.label :excerpt %><br />
<%= f.text_field :excerpt %>
</div>
<div class="field">
<%= f.label :body %><br />
<%= f.text_area :body %>
</div>
<div class="field">
<%= f.label :published_at %><br />
<%= f.datetime_select :published_at %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
Parameters are sent to the controller in params[:article]
.
Partials and Files
Examples called in something like app/views/articles/edit.html.erb
<%= render 'form' %>
renders app/views/articles/_form.html.erb
<%= render 'header', :title => 'My Blog' %>
renders app/views/articles/_header.html.erb
and passes local variable title
<%= render @article %>
Rails looks for a partial in app/views/articles/_article.html.erb
and automatically assigns a local variable called article. It's a shortcut for
<%= render 'article', :article => @article %>
<%= render @articles %>
equivalent to
<% @articles.each do |object| %>
<%= render object %>
<% end %>
If your partial is more like a full-fledged action, you can render it as a file:
<%= render :file => 'comments/new' %>
which renders app/views/comments/new.html.erb
.