Ruby on Rails ステップ・バイ・ステップ
STEP 10: finishアクションの実装
今回は、タスク一覧ページにある「完了」リンクを実装します。
このリンクをクリックすると、done カラムの値が true になり、タスクが完了したことになります。
まず、ルーティングを修正します。
$ edit config/routes.rb
ActionController::Routing::Routes.draw do |map|
map.root :controller => 'top', :action => 'index'
map.resources :tasks,
:member => { :simple => :get, :finish => :put },
:collection => { :unfinished => :get }
end
5行目の :member オプションの値に :finish => :put という要素を追加しています。
この finish アクションは、特定のレコードの中身を変化させます。そのような場合は、PUTメソッドを利用します。
次に、finish アクションを実装します。
$ edit app/controllers/tasks_controller.rb
class TasksController < ApplicationController
(省略)
def finish
@task = Task.find(params[:id])
@task.update_attribute(:done, true)
redirect_to :tasks
end
def destroy
(省略)
end
特定のタスクの done カラムを true にセットし、タスク一覧ページにリダイレクトしています。
ヘルパー operations_on_task を修正します。
$ edit app/helpers/tasks_helper.rb
module TasksHelper
def operations_on_task(task)
links = []
links << link_to('簡易表示', [ :simple, task ])
links << link_to('編集', [ :edit, task ])
if task.done?
links << content_tag(:span, '完了', :class => 'disabled')
else
links << link_to('完了', [ :finish, task ], :method => :put)
end
links << link_to('削除', task, :method => :delete,
:confirm => '本当に削除しますか?')
links.join(' | ')
end
end
7行目では content_tag メソッドを使って span 要素を生成しています。直接的に文字列で links << "<span class='disabled'>完了</span>" のように記述しても構わないのですが、私は content_tag メソッドを好んで利用します。現状では span 要素の class 属性に 'disabled' という固定値を指定していますが、式を使って動的に指定したくなるかもしれません。その場合、"<span class='#{式}'>完了</span>" のように式を埋め込むよりも、content_tag(:span, '完了', :class => 式) と書いた方が読みやすくなります。
スタイルシートを修正します。
$ edit public/stylesheets/application.css
a:visited {
color: blue;
}
span.disabled {
color: #888;
}
(省略)
ブラウザでタスク一覧ページを表示して、適当なタスクの「完了」リンクをクリックすると、完了カラムの値が「Yes」に変化します。

(2010/02/13)
記事に関するご質問は、 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)

