トップページ機能の追加
このセクションでは「scaffoldを用いた機能の追加」に続いて、ブログに投稿された記事を一覧表示する「トップページ機能」を追加する手順を解説します。
<チュートリアルを進めるにあたって>
・アプリケーション名は"blog"、アプリケーションのルートフォルダは、"c:¥rails_apps¥blog"とします
・アプリケーションのルートフォルダのパスは、"RAILS_ROOT"と記載します
・コマンドプロンプトを用いた操作は、特別な指定がない限り全て"RAILS_ROOT"に移動した状態で行います
Generatorを用いたコントローラークラスとビューの生成
追加するトップページに対応するコントローラークラスとビューを、Generatorを用いて作成します。
コマンドプロンプトで「rails generate controller home index」とタイプしてEnterキーを押下します。コマンドプロンプト上には、ファイル・フォルダが自動生成される様子が以下のように表示されます。
c:\rails_apps\blog>rails generate controller home index
create app/controllers/home_controller.rb
route get "home/index"
invoke erb
create app/views/home
create app/views/home/index.html.erb
invoke test_unit
create test/functional/home_controller_test.rb
invoke helper
create app/helpers/home_helper.rb
invoke test_unit
create test/unit/helpers/home_helper_test.rb
invoke assets
invoke coffee
create app/assets/javascripts/home.js.coffee
invoke scss
create app/assets/stylesheets/home.css.scss
コントローラークラス "HomeController"
コントローラクラスが、ファイル"RAILS_ROOT\app\controllers\home_controller.rb"に生成されます。
"HomeController"は、トップページにアクセスされた際のサーバ側処理を実装するコントローラクラスです。
class HomeController < ApplicationController
def index
end
end
ビュー "RAILS_ROOT\app\views\home\index.html.erb"
ビューファイルが"RAILS_ROOT\app\views\home\index.html.erb"として生成されます。
このビューは、HomeController#indexで処理した結果を用いてトップページの画面を表示するためのビューになります。
<h1>Home#index</h1>
<p>Find me in app/views/home/index.html.erb</p>
※自動生成されたビューの中身には特別な意味はありませんので、削除しても問題ありません。
ルーティング情報
作成したプログラムのルーティング情報が、"RAILS_ROOT\config\routes.rb"に以下のように追加されます。 Railsのルーティングルールにより、「http://localhost:3000/home/index」へのアクセスはHomeControllerのindexメソッドで処理されるようになります。
Blog::Application.routes.draw do
+ get "home/index"
:
以下略
※行頭に"+" が付いた行が追加されたコードです。
コントローラの実装(記事データ取得)
トップページで表示する記事データを取得する処理を、Generatorで生成したコントローラークラスHomeControllerに実装します。
ここでは、記事データを扱うモデルクラス"Article"のallメソッドを使って記事データを全て取得し、コントローラーのインスタンス変数(@articles)に格納します。
class HomeController < ApplicationController
def index
+ @articles = Article.all # 記事テーブルから全てのレコードを取得する
end
end
※行頭に"+" が付いた行が追加したコードです。
ビューの実装(記事データ表示)
コントローラーのインスタンス変数(@articles)に設定した記事データを表示させるための機能を、Generatorで生成したビュー"RAILS_ROOT\app\views\home\index.html.erb"に実装します。Railsのビューでは<%...%>で囲まれた部分にRubyコードを埋め込むことができます。また、Rubyコード中ではビューを使用しているコントローラーのインスタンス変数が利用できます。
下の例では<%...%>の中で、HomeControllerで設定した変数@articlesが解釈され配列内のデータを展開しています。また<%=...%>で囲むと、囲まれたコードの式を評価した結果を出力します。
なおこの実装例では、説明を簡略化する目的でHTMLタグ中にスタイルを定義していますが、実際のアプリケーション開発ではSCSSなどRailsの機能を用いて スタイルを定義することをお勧めします。
-<h1>Home#index</h1>
-<p>Find me in app/views/home/index.html.erb</p>
+<% @articles.each do |article| %>
+ <div style="width:500px;border:1px solid #ccc;margin:5px">
+ <div style="float:left">
+ <h2 ><%= article.title %></h2>
+ </div>
+ <div style="clear:both">
+ <pre><%= article.content %></pre>
+ </div>
+ </div>
+<% end %>
※行頭に"-" が付いた行が削除したコードです。
※行頭に"+" が付いた行が追加したコードです。
トップページ用のルーティング情報の追加
トップページのURL「http://localhost:3000/」にアクセスされた場合に、作成したコントローラクラスとビューを用いるようにするため、"RAILS_ROOT\config\routes.rb"の中のBlog::Application.routes.draw do ~ endの間に以下のルーティング情報を追加します。
Blog::Application.routes.draw do
get "home/index"
+ root :to => 'home#index'
以下略
end
※行頭に"+" が付いた行が追加したコードです。
"RAILS_ROOT\public\index.html"ファイルの削除
"RAILS_ROOT\public\index.html"を削除するか、ファイル名を変更します。
トップページの確認
アプリケーションを再起動させた後、Webブラウザで「http://localhost:3000/」にアクセスすると、以下の画面のようにブログに登録された記事の"タイトル"と"内容"が全て表示されます。
※記事の内容、件数は、前のステップ「記事管理機能のscaffold(雛形)作成 」で登録されたデータによって異なります。
「コメント登録機能の追加 - (1)コメントの表示」に続きます。