可能有一个更好的方法来做到这一点涉及会话。我宁愿避免完全使用会话哈希,使用第二种形式和大量的 javascript。
这是我的处理方式。第一个表单根本不会有太大变化,只需提交一个名为审核的新操作。
审核操作将显示更改以供审核,并显示一个编辑链接和一个确认按钮。它还将在隐藏元素中从上一页重新创建表单,该隐藏元素将再次提交给审核操作。
确认按钮将提交给您的更新操作。
单击编辑链接将隐藏审阅区域并显示与上一页重复的内容。
这里有一些示例代码来强调这一点:
应用程序/控制器/example_controller.rb
class ExampleController < ApplicationController
def edit
@example = Example.find(params[:id])
end
def review
@example = Example.find(params[:id])
@example.update_attributes(params[:example])
@example.valid?
end
def update
@example = Example.find(params[:id])
@example.update_attributes(params[:example])
if @example.save
redirect_to @example
else
render :action => :review
end
end
end
应用程序/视图/示例/_form.html.erb:
<% form_form @example, :url => {:action => "review"} do |f|%>
...
Form inputs go here
...
<% end %>
应用程序/视图/示例/edit.html.erb:
<%= render :parital => form %>
应用程序/视图/示例/review.html.erb:
<div id="review">
...
content for review goes here
...
<%= link_to_function "Edit", "$('review').hide(); $('edit').show()"
<% form_for @example do |f| %>
<%= hidden_field :attribute, @example.attribute %>
...
hidden_field for each attribute
...
<%= submit_tag "Accept These Changes" %>
<% end %>
</div>
<div id="edit" style="display:none">
<%= render :partial => 'form' %>
</div>