RESTful なインターフェースを備えた Web アプリケーション(その 6)
いよいよ edit, update, destroy を作ります。データの編集と削除は詳細画面からできるようにしたいので、show の View をまず修正します。
sample/app/views/customers/show.html.erb
<h1>顧客詳細</h1> <table border> <tr><th>顧客 ID</th><td><%= @customer.id %></td></tr> <%= render @customer %> </table> <table> <tr> <td><%= button_to '編集', edit_customer_path(@customer.id), :method => :get %></td> <td><%= button_to '削除', customer_path(@customer.id), { :method => :delete, :confirm => '本当に削除しますか ?' } %></td> </tr> </table> <%= render 'back' %>
View の作成
sample/app/views/customers/edit.html.erb
<h1>編集</h1> <%= form_for @customer, :html => { :method => :put } do |f| %> <%= render 'form', :form => f, :button_name => '修正' %> <% end %> <%= render 'back' %>
sample/app/views/customers/update.html.erb
<%= render 'msg' %> <table border> <%= render @customer %> </table> <%= render 'back' %>
sample/app/views/customers/destroy.html.erb
<%= render 'msg' %> <table border> <%= render @customer %> </table> <%= render 'back' %>
あらかじめ部分テンプレートを用意したので update と destroy はかなりシンプルになっています。
Controller の修正
sample/app/controllers/customers_controller.rb
# coding: utf-8 class CustomersController < ApplicationController def index @customers = Customer.all end def show @customer = Customer.find(params[:id]) end def new @customer = Customer.new end def create @customer = Customer.create(params[:customer]) if !@customer.new_record? @msg = '登録されました' else @msg = '登録に失敗しました' end end def edit @customer = Customer.find(params[:id]) end def update @customer = Customer.find(params[:id]) if @customer.update_attributes(params[:customer]) @msg = '編集されました' else @msg = '編集に失敗しました' end end def destroy @customer = Customer.find(params[:id]) if @customer.destroy @msg = '削除されました' else @msg = '削除に失敗しました' end end end
次回は実際に動作するところをサンプルでお見せします。