登録前に確認画面を出して欲しい
と言われることが、まぁあります。
railsでconfirm画面を表示する方法はいろいろあるようなのですが、
とりあえず以下のようにしてみました。
使うアクションとviewは一つずつにしてみています。
まずはコントローラーは以下のような感じです。
class AaaController < ApplicationController def aaa
#最初の表示
unless params[:commit]
params.delete(:confirm)
return
end
#postされたら、まずはvalidateする
@err = Hash.new
@err[:val] = 1 if params[:val].blank?
#validateでエラーがあったら返す
unless @err.size == 0
flash.now[:error] = "validate error"
return
end
#確認画面表示
unless params[:confirm]
params[:confirm] = 'confirm'
return
end
#確認後の登録処理をこれ以降に書く
params.delete(:confirm)
flash[:notice] = "登録したよ[#{params[:val]}]"
end
end
そしてviewは以下のような感じです。
<% if params[:confirm] %>
<h1>確認</h1>
<% else %>
<h1>登録</h1>
<% end %>
<%= form_tag(:action => "aaa") %>
<%= label_tag(:val, "val") %>:
<% if params[:confirm] %>
<%= params[:val] %>
<%= hidden_field_tag :val,params[:val] %>
<% else %>
<%= text_field_tag("val",params[:val]) %>
<% end %>
<br />
<p class="form-footer">
<% if params[:confirm] %>
<%= hidden_field_tag :confirm %>
<%= submit_tag '作成', :class => "submit" %>
<%= submit_tag 'キャンセル', :name => "cancel" ,:class => "submit" %>
<% else %>
<%= submit_tag '確認', :class => "submit" %>
<% end %>
</p>
</form>
通常入力用と確認用のテンプレートを用意するのでもよいと思います。
実際に表示させると以下のような感じです。
validateで失敗すると以下のような感じ。
以下のようにちゃんと入力して「登録」をクリックすると
以下のような確認画面になります。
「キャンセル」をクリックすると確認前の画面に戻って、「作成」をクリックすると以下のように登録完了になります。














