Ruby on Rails ステップ・バイ・ステップ
STEP 8: 未完了タスクの一覧
今回は、基本の7アクション以外のアクションを追加する方法を説明したいと思います。
/tasks ですべてのタスクの一覧が表示されますが、/tasks/unfinished で未完了タスクの一覧が表示されるようにしてみましょう。
まず、ルーティングを修正します。
$ edit config/routes.rb
ActionController::Routing::Routes.draw do |map|
map.root :controller => 'top', :action => 'index'
map.resources :tasks,
:collection => { :unfinished => :get }
end
:collection オプションは、レコードの集合(collection)に作用するアクションを定義する時に使用します。
オプションの値は { :unfinished => :get } というハッシュです。ハッシュのキー(:unfinished)はアクション名、値(:get)はアクションを呼ぶ時に使用するHTTPメソッドを示しています。
Railsでは、GET/POST/PUT/DELETE という4つのHTTPメソッドを使い分けます。
HTTPメソッドについては、Wikipedia の Hypertext Transfer Protocol を参照してください。
続いて、Tasks コントローラに unfinished アクションを追加します。
$ edit app/controllers/tasks_controller.rb
class TasksController < ApplicationController
def index
@tasks = Task.all(:order => 'due_date')
end
def unfinished
@tasks = Task.unfinished.all(:order => 'due_date')
render :action => 'index'
end
(省略)
end
Task モデルに unfinished メソッドを定義します。
$ edit app/models/task.rb
class Task < ActiveRecord::Base
named_scope :unfinished, :conditions => { :done => false }
(省略)
end
named_scope メソッドは、レコードオブジェクトを「ある方法」で取得するクラスメソッドをモデルに追加してくれます。ここでは、done の値が false であるという条件を満たすレコードだけを取得する unfinished メソッドを定義しています。
次に、トップページのテンプレートを修正します。
$ edit app/views/top/index.html.erb
<h1>メニュー</h1> <ul> <li><%= link_to 'タスク一覧(全部)', :tasks %></li> <li><%= link_to 'タスク一覧(未完了)', [ :unfinished, :tasks ] %></li> </ul>
最後に、タスク一覧ページのテンプレートを修正します。
$ edit app/views/tasks/index.html.erb
<% if params[:action] == 'index' %> <h1>タスク一覧(全部)</h1> <% else %> <h1>タスク一覧(未完了)</h1> <% end %> (省略)
ブラウザでトップページを表示します。

「タスク一覧(未完了)」リンクをクリックします。

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

