我沿用了这些方面的“多页”表单 - 但它是为 Rails 2.2 构建的,而我只是在为 Rails 3 调整方法。
基本上,我们使用了一个选项卡式布局,整个表单都在一个视图中 - 尽管这种方法在 Rails 2.2 中主要针对一个控制器,但我认为它可以更好地分解。
布局意味着表单的每个部分都可以通过选项卡访问 - 但每个选项卡部分也有一个指向下一部分的 link_to 操作,位于该部分的底部(例如 A 部分 -> B 部分)每次移动到新部分时都会保存整个表单 - 我已经大量编辑视图只是为了给出一个想法,但如果它是一个新表单,它只会在每个部分的提交按钮被按下后显示每个部分。
<ul id="tabs">
<li><a href="#SectionA">Section A</a></li>
<li><a href="#SectionB">Section B</a></li>
<li><a href="#SectionC">Section C</a></li>
<li><a href="#SectionD">Section D</a></li>
<li><a href="#SectionE">Section E</a></li>
<li><a href="#SectionF">Section F</a></li>
<li><a href="#SectionG">Section G</a></li>
<li><a href="#SectionH">Section H</a></li>
<li><a href="#SectionI">Section I</a></li>
<li><a href="#SectionJ">Section J</a></li>
</ul>
<%=hidden_field_tag 'active_fabtabulous_tab'%>
<% form_for(@detail) do |f| %>
<%= f.error_messages %>
<div class="panel" id="SectionA">
<b><u>Section A: Questionnaire Details</u></b>
<br></br>
<table>
<tr>
<td><div id="field_name">Questionnaire received on (dd/mm/yyyy):</div></td>
<td><%= date_select("questionnaire", :received_on, :order=>[:day,:month,:year],:use_month_numbers=>true,:start_year=>Date.today.year,:end_year=>2008,:include_blank => true) %></td>
</tr>
<tr>
<td><div id="field_name">Interviewer name:</div></td>
<td><%=text_field("questionnaire",:intervieweename)%></td>
</tr>
</table><!-- end questionnaire div -->
<%= f.submit "SectionB" , :class => "questButton" %>
</div>
<!--- Page 2 --->
<div class="panel" id="SectionB">
<b><u>Section B: Case Classification</u></b>
<br></br>
<% fields_for :patient, @patient do |p| %>
<table>
<tr>
<td class="sectionA_is_this_case"><div id="field_name">Epidemiology definition:</div></td>
<td><%= @patient.epidef %>
</td>
</tr>
</table>
<% end %>
<table>
<tr>
<% fields_for :patient, @patient do |p| %>
<td><div id="field_name">Asymptomatic:</div></td>
<td><% if @patient.asymptomatic %>Yes<% else %>No<% end %></td>
<% end %>
<tr>
<tr>
<td><div id="field_name">Investigation is:</div></td>
<td><%=select("detail", "invstatus", INVESTIGATION_IS)%></td>
</tr>
<tr>
<td><div id="field_name">Outbreak keyword or number:</div></td>
<td><%= f.text_field :outbreakid ,:cols => 40, :rows => 1 %></td>
</tr>
</table>
</div>
<%= f.submit "SectionC" , :class => "questButton" %>
</div>