2011-12-19

railsでconfirm画面を表示する

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
今どきなシステムだと、あんまり確認画面って感じではないとは思うのですが、
登録前に確認画面を出して欲しい
と言われることが、まぁあります。

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で失敗すると以下のような感じ。

以下のようにちゃんと入力して「登録」をクリックすると

以下のような確認画面になります。

「キャンセル」をクリックすると確認前の画面に戻って、「作成」をクリックすると以下のように登録完了になります。


コメントを投稿