Там может быть лучший способ сделать это с помощью сессий. Я бы предпочел избегать использования хеша сессии целиком, со второй формой и большим количеством javascript.
Вот как я справлюсь с этим.
Первая форма вообще ничего не изменит, просто отправьте на новое действие под названием review.
Действие рецензирования отобразит изменения для рецензирования, и у них будет ссылка для редактирования и видимая кнопка подтверждения. Он также воссоздает форму с предыдущей страницы в скрытом элементе, который снова будет отправлен в действие проверки.
Кнопка подтверждения отправит ваше действие по обновлению.
При нажатии на ссылку редактирования скрывается область обзора и показываются дубликаты с предыдущей страницы.
Вот пример кода, который поможет вам разобраться:
приложение / контроллеры / 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
* ** 1017 1018 * приложение / просмотров / примеры / _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>