Ruby on Rails ステップ・バイ・ステップ
STEP 6: レコードの編集
今回は、タスクを編集する機能を作ります。
まず入力フォーム用のテンプレートを作るのですが、新規追加のコードとほぼ同じなので、コピーして修正することにします。
$ cp app/views/tasks/new.html.erb app/views/tasks/edit.html.erb $ edit app/views/tasks/edit.html.erb
修正箇所は2箇所だけです。1行目
<h1>新規タスクの追加</h1>
を次のように変えます。
<h1>タスクの編集</h1>
それから、下から3行目
<%= f.submit '追加' %>
を次のように変えます。
<%= f.submit '保存' %>
2つのテンプレートがよく似ているときは、共通する部分を部分テンプレートとして抽出するといいでしょう。
部分テンプレート _form.html.erb を作成します。
$ edit app/views/tasks/_form.html.erb
new.html.erb の3行目以降をすべて切り取って、_form.html.erb に貼り付けます。
<% form_for @task do |f| %>
<%= f.error_messages %>
<table class="attributes">
<tr>
<th>件名</th>
<td><%= f.text_field :subject %></td>
</tr>
<tr>
<th>期日</th>
<td><%= f.date_select :due_date %></td>
</tr>
<tr>
<th>完了</th>
<td>
<%= f.radio_button :done, true %> Yes
<%= f.radio_button :done, false %> No
</td>
</tr>
<tr>
<th>注記</th>
<td><%= f.text_area :note, :size => '40x5' %></td>
</tr>
</table>
<div class="submit">
<%= f.submit '保存' %>
</div>
<% end %>
そして、下から3行目を次のように変更します。
<%= f.submit f.object.new_record? ? '追加' : '保存' %>
new.html.erb を次のように変更します。
$ edit app/views/tasks/new.html.erb
<h1>新規タスクの追加</h1> <%= render :partial => 'form' %>
edit.html.erb を次のように変更します。
$ edit app/views/tasks/edit.html.erb
<h1>タスクの編集</h1> <%= render :partial => 'form' %>
タスク一覧ページに「編集」リンクを設置します。
$ edit app/helpers/tasks_helper.rb
module TasksHelper
def operations_on_task(task)
links = []
links << link_to('編集', [ :edit, task ])
links << link_to('完了', '#')
links << link_to('削除', task, :method => :delete,
:confirm => '本当に削除しますか?')
links.join(' | ')
end
end
修正箇所は4行目です。
Tasksコントローラにeditアクションを追加します。
class TasksController < ApplicationController
(省略)
def new
@task = Task.new
end
def edit
@task = Task.find(params[:id])
end
(省略)
end
ブラウザでタスク一覧ページを開き、「編集」リンクをクリックすると次のようなページが表示されます。

最後にTasksコントローラにupdateアクションを追加します。
class TasksController < ApplicationController
(省略)
def update
@task = Task.find(params[:id])
@task.attributes = params[:task]
if @task.save
redirect_to :tasks
else
render :action => 'edit'
end
end
def destroy
@task = Task.find(params[:id])
@task.destroy
redirect_to :tasks
end
end
編集フォームの各フィールドを適当に変更し、

「保存」ボタンをクリックすると、

のように編集が完了します。
(2010/02/02)
記事に関するご質問は、 hermes@oiax.jp までメールでお送りください。
ウェブサイト構築の発注先を検討されているお客様は、ご相談フォームをご利用ください。
- はじめに
- STEP 1: アプリケーションの作成からトップページの表示まで (2010/01/26)
- STEP 2: レイアウト (2010/01/27)
- STEP 3: レコードの一覧 (2010/01/29)
- STEP 4: レコードの詳細表示と削除 (2010/01/30)
- STEP 5: レコードの新規追加 (2010/02/01)
- STEP 6: レコードの編集 (2010/02/02)
- STEP 7: 基本7アクション (2010/02/02)
- STEP 8: 未完了タスクの一覧 (2010/02/03)
- STEP 9: タスクの簡易表示 (2010/02/12)
- STEP 10: finishアクションの実装 (2010/02/13)
- STEP 11: 確認画面(1) (2010/02/14)
- STEP 12: 確認画面(2) (2010/02/25)
- STEP 13: 確認画面(3) (2010/02/25)
- STEP 14: 確認画面(4) (2010/02/26)

