Rails 3 View: Difference between revisions

From Wiki
Jump to navigation Jump to search
 
(3 intermediate revisions by the same user not shown)
Line 17: Line 17:
</source>
</source>


=== Form Example ===
=== Form-with-object Example ===
<source lang="ruby">
<source lang="ruby">
<%= form_for(@article) do |f| %>  
<%= form_for(@article) do |f| %>  
Line 60: Line 60:
Parameters are sent to the controller in <code>params[:article]</code>.
Parameters are sent to the controller in <code>params[:article]</code>.


=== Partials ===
=== Anonymous form example ===
<source lang="ruby">
<%= form_tag('/runs/update') do %>
    <tr><td>treadmill time: <%= text_field_tag :treadmill_time %></td>
    <td>treadmill miles: <%= text_field_tag :treadmill_miles %></td></tr>
    <tr><td colspan="2"><%= hidden_field_tag :id, @run.id %><%= submit_tag('Save') %></td></tr>
<% end %>
</source>
 
=== Partials and Files ===
Examples called in something like <code>app/views/articles/edit.html.erb</code>
<source lang="ruby">
<source lang="ruby">
<%= render 'form' %>
<%= render 'form' %>
Line 76: Line 86:
<%= render 'article', :article => @article %>
<%= render 'article', :article => @article %>
</source>
</source>
<source lang="ruby">
<source lang="ruby">
<%= render @articles %>
<%= render @articles %>
Line 85: Line 96:
<% end %>
<% end %>
</source>
</source>
If your partial is more like a full-fledged action, you can render it as a file:
<source lang="ruby">
<%= render :file => 'comments/new' %>
</source>
which renders <code>app/views/comments/new.html.erb</code>.

Latest revision as of 18:50, 6 December 2011

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-with-object 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].

Anonymous form example

<%= form_tag('/runs/update') do %>
    <tr><td>treadmill time: <%= text_field_tag :treadmill_time %></td>
    <td>treadmill miles: <%= text_field_tag :treadmill_miles %></td></tr>
    <tr><td colspan="2"><%= hidden_field_tag :id, @run.id %><%= submit_tag('Save') %></td></tr>
<% end %>

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.