Я унаследовал «многостраничную» форму в том же духе - но она была построена для 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>