STEP 14: 確認画面(4)

2010/02/26

STEP 11-13で行ったことをタスクを編集する場合についても行って、「確認画面」の実装を終わりにしましょう。


ルーティングを修正します。

$ edit config/routes.rb
ActionController::Routing::Routes.draw do |map|
  map.root :controller => 'top', :action => 'index'

  map.resources :tasks,
    :new => { :new => :post },
    :member => { :simple => :get, :finish => :put, :edit => :put, :confirm => :put },
    :collection => { :unfinished => :get, :confirm => :post }
end

:member オプションに要素 :edit => :put:confirm => :put を追加しています。


edit アクションのテンプレートを修正します。

$ edit app/views/tasks/edit.html.erb
<h1>タスクの編集</h1>

<% form_for [ :confirm, @task ] do |f| %>
<%= render :partial => 'form', :locals => { :f => f } %>
<% end %>
$ edit app/views/tasks/_form.html.erb
(省略)

<div class="buttonGroup">
  <input type="button" value="戻る" disabled="disabled" />
  <%= f.submit '次へ' %>
</div>

confirm アクションを修正します。

$ edit app/controllers/tasks_controller.rb
  def confirm
    if request.post?
      @task = Task.new(params[:task])
    else
      @task = Task.find(params[:id])
      @task.attributes = params[:task]
    end
    if @task.valid?
      render :action => 'confirm'
    else
      render :action => request.post? ? 'new' : 'edit'
    end
  end
end

部分テンプレート button_to_back を修正します。

$ edit app/views/tasks/_button_to_back.html.erb
<% form_for(@task, :url => @task.new_record? ? [ :new, :task ] : [ :edit, @task ]) do |f| %>
  <% [ :subject, :due_date, :done, :note ].each do |attr| %>
    <%= f.hidden_field attr %>
  <% end %>
  <%= f.submit '戻る' %>
<% end %>

edit アクションを修正します。

$ edit app/controllers/tasks_controller.rb
  def edit
    @task = Task.find(params[:id])
    @task.attributes = params[:task] if request.put?
  end
end

ブラウザで動作を確認します。

画面キャプチャ1

「次へ」ボタンをクリックします。

画面キャプチャ2

「戻る」ボタンをクリックすると…

画面キャプチャ3

一応、これで「確認画面」は完成です。