TOPシステム開発> コントローラの変更
Ruby on Rails入門
Ruby on Rails入門

第3回:アーキテクチャと検索機能の追加
著者:DTS  五座 淳一   2006/6/7
前のページ  1  2  3  4
コントローラの変更

   リスト5はContactsControllerクラスに追加するsearchメソッドです。
リスト5:searchアクション
def search
   @contact_pages, @contacts = paginate :contacts, :per_page => 10,
      :conditions => ["name LIKE ?", params[:contact][:name] + '%' ]
   @keyword = params[:contact][:name]
   render :action => 'list'
end

   searchメソッドは短いメソッドではありますが、3つの重要なファクターが使われています。

params
フォームからの入力値は、paramsというハッシュオブジェクトに格納されます。リスト5では入力された検索キーワードをparamsから取得し、paginateの検索条件に使用しています

render
アクション名と同名のビューが表示されることはすでに説明しましたが、「render :action =>'アクション名'」を記述すると、指定したアクションで使われているビューが表示されます。今回の例では、「app/views/contacts/list.rhtml(一覧表示画面)」が表示されることになります

paginate
Webアプリケーションでは、件数の多い項目を複数のページに分割して、「次のページへ」「前のページへ」とリンクを表示することがよくあります。paginateはこのページ分割を簡単に実現できます

表2:searchメソッドの3つの重要なファクター

   paginateの基本的な使い方は、第1引数にモデルを指定し、第2引数に1ページあたりの表示件数を指定することによって、ビューに「次のページへ」「前のページへ」のリンクを作成することができます(paginateの第3引数以降には、オプションで検索条件などを指定することもできます)。

   今回実装したsearchアクションに対応するpaginateのビューは、Scaffoldによって生成されたlist.rthmlの実装(リスト6)をそのまま使用するため、実装の必要はありません。

リスト6:paginateを使ったビュー
<%= link_to 'Previous page', { :page => @contact_pages.current.previous } if @contact_pages.current.previous %>
<%= link_to 'Next page', { :page => @contact_pages.current.next } if @contact_pages.current.next %>

   以上で検索機能の実装が完了しました。たったこれだけのコードでページ管理が実現できるRailsの生産性には驚かされます。

サンプル
Text  AddressBook.zip
  (ZIPファイル/64.3KB)


動作確認

   それでは早速動作確認をしてみましょう。RadRailsの右下ペインの「Servers」より「AddressBookServer」を起動して(注)、Webブラウザで以下のURLにアクセスしてみましょう。アドレス帳アプリに検索が追加されたことが確認できます。

http://localhost:3000/contacts

※注:
コマンドプロンプトから「ruby script/server」と入力することで、Webサーバを起動することもできます。


まとめ

   Scaffoldで作成したアドレス帳を使って、Rails開発の基礎を説明しましたがいかがでしたでしょうか。

   1つ1つの機能を実現するためのコードが極端に少なく、Railsの高い生産性を実感していただけたと思います。

   次回は、Railsのテストについて解説します。

前のページ  1  2  3  4


株式会社DTS  五座 淳一氏
著者プロフィール
株式会社DTS  五座 淳一
技術部所属。入社以来、交換機や携帯電話、Webシステムなど様々な開発を担当する。Ruby on Rails上に構築したオープンソースのCMS「Rubricks」(http://rubricks.org/)のコミッタ。


INDEX
第3回:アーキテクチャと検索機能の追加
  Scaffold
  モデル
  コントローラ
コントローラの変更