教材の内容に関係のない質問や教材とは異なる環境・バージョンで進めている場合のエラーなど、教材に関係しない質問は推奨していないため回答できない場合がございます。
その場合、teratailなどの外部サイトを利用して質問することをおすすめします。教材の誤字脱字や追記・改善の要望は「文章の間違いや改善点の指摘」からお願いします。
2章ではトップページを作成していきます。ここでいうトップページとは投稿一覧画面(タイムライン)です。まずトップページから作成するのは、ユーザーが新規登録やログインした際に遷移するページを用意するためです。
本パートでは下記の画像のようにデザインは特にしていない仮のトップページを表示させるところまでやっていきます。
ページが表示されるまでの流れは前回の「2-2 MVCについて学ぼう」で説明した通り、ルーティング→コントローラー→ビューという順で処理が行われるので、実装もこの順番でやっていきます。
では実際に進めていきましょう。
まずトップページのルーティングの設定を行います。
ルーティングは受け取ったURLを認識し、適切なコントローラー内のアクションを動かすように設定します。
今回はpagesコントローラーのhomeアクションのルーティングをトップページのルーティングとして設定します。
config/routes.rb
に以下のコードを追加してください。
Copied!config
└── routes.rb
ruby1234 Copied!Rails.application.routes.draw do
# ここにpagesコントローラーのhomeアクションのルーティングを追加する
get 'pages/home'
end
rails routes
というコマンドを実行することで設定しているルーティングを全て表示できます。実際に下記のコマンドを入力してください。
Copied!$ rails routes
すると下記の画像のようにルーティングの一覧が表示されます。
下記のルーティングが今回設定したルーティングの情報になります。
Copied!pages_home GET /pages/home(.:format) pages#home
簡単に用語を解説すると、名前付きヘルパーはpages_home_path
のように末尾に_path
を付け加えることで、ビュー内で使えるURLになります。
HTTP動詞はクライアントが行いたい処理をサーバーに伝えるという役割があります。
Railsでは以下の4種類のHTTP動詞があります。
今回はページを表示させたいだけなので、HTTP動詞はGET
に指定しています。
次にトップページで使うコントローラーを作成します。コントローラーの名称は先程設定したルーティングでpages
と指定したので、pagesコントローラーを作成していきます。
コントローラーはルーティングからリクエストを受け取り、データをモデルから取得したりモデルに保存するなどの作業を行い、最後にビューを使用してHTML出力を生成します。
コントローラーは「rails g controller コントローラー名」というコマンドで作成出来ます。以下のコマンドを実行してください。
Copied!$ rails g controller pages
上記のコマンドを実行するとターミナルに下記のような実行結果が表示されます。
Copied!$ rails g controller pages
Running via Spring preloader in process 69566
create app/controllers/pages_controller.rb
invoke erb
create app/views/pages
invoke test_unit
create test/controllers/pages_controller_test.rb
invoke helper
create app/helpers/pages_helper.rb
invoke test_unit
invoke assets
invoke coffee
create app/assets/javascripts/pages.coffee
invoke scss
create app/assets/stylesheets/pages.scss
次に作成したコントローラーにアクションを追加していきます。ルーティングが実際に処理するのはコントローラーに作成されたアクションです。
まず先ほど追加したルーティングを確認してみましょう。
今回の場合はpages#home
、つまりpagesコントローラーのhomeアクションを処理するように指定しています。なのでpagesコントローラーにhomeアクションを作成していきましょう。
app/controlllers/pages_controller.rb
に以下のコードを追加してください。
Copied!app
└── controllers
└── pages_controller.rb
ruby12345678 Copied!class PagesController < ApplicationController
# ==========ここから追加する==========
def home
end
# ==========ここまで追加する==========
end
今回は仮のトップページを表示させるだけで、特にデータベースからデータを取ってくるわけではないのでhomeアクションの中には何も書かなくて大丈夫です。
最後にビューを追加します。アプリケーションのapp/viewsディレクトリには、1つのコントローラーごとに1つのディレクトリが作成され、そこにビューテンプレートファイルが置かれます。このビューテンプレートはそのコントローラーに関連づけられています。
今回はpagesコントローラーなのでpagesディレクトリのアクションごとに出力された結果をビューで表示させます。
app/views/pages/ディレクトリ内にhome.html.erb
を追加してください。追加したらhome.html.erb
に以下のコードを追加してください。
Copied!app
└── views
└── pages
└── home.html.erb
html1 Copied!<p>このページは仮のトップページです。</p>
では、実際に仮のトップページを表示されるか確認します。もう一度今回のパートで追加したルーティングのパスを確認してみましょう。
パスがpages/home
となっているので「http://localhost:3000/ 」にpages/home
を付け足して、http://localhost:3000/pages/home にアクセスしてみましょう。下記の画像のように表示されていればうまく動作しています。
Cloud9の方はこちらを参考にページを表示させてください。
パスが
〜〜amazonaws.com
のあとに/pages/home
を付け足せば表示できます。
(サーバーを立ち上げていない場合はターミナル上で「bundle exec rails s」を実行してサーバーを立ち上げてください。)
仮のトップページを「http://localhost:3000」にアクセスしたら表示できるようにルーティングの設定を行います。
rootメソッドを使用することで、Railsがルート/
とすべき場所を指定できます。
参考)rootを使用する
config/routes.rb
を以下のように編集してください。
Copied!config
└── routes.rb
ruby1234 Copied!Rails.application.routes.draw do
# この行を編集する
root 'pages#home'
end
編集できたら http://localhost:3000 にアクセスして下記の画像のように表示されていればうまく動作しています。
以上で今回のパートは終了です。
お疲れ様でした。