Railsチュートリアル　第３章 3.1〜3.3　要約

<h2>この記事の目的</h2>
・現在、Railsチュートリアルを学習しています。Railsチュートリアルで理解したことをアウトプットすることにより理解を深め、のちに行うアプリケーション開発に役立てていきたいと考えています。また、私みたいな初学者の方との情報共有になればと思います。
　※Git Github Herokuの扱い方などはまた別にまとめてみようと思います。
<h2>3.1セットアップ</h2>
・新しくRailsプロジェクトを作成する
※手順がわかりやすいように番号をつけてまとめてみました。
***
１ サンプルアプリケーションを生成する。

```
$ rails _6.0.3_ new sample_app
$ cd sample_app/
```
2 Gemfileを編集、gemをインストール

```
$ bundle _2.2.17_ config set --local without 'production'
$ bundle _2.2.17_ install
```
3 Yarnを使ってWebpackerをインストール

```
$ rails webpacker:install
```

4 Hello Worldを出力してみる。 動くかどうか確認　application_controllerにhelloアクションを追加　＋　ルーティングの設定

```app/controllers/application_controller.rb
def hello
   render html: "hello, world!"
end
```
```config/routes.rb
root 'application#hello'
```
***
<h2> 3.2静的なページ　</h2>
・Railsのアクションやビューを使って静的なHTMLのみのページを作成し、その後、静的なページを動的なページに作り変える。
***
 StaticPagesコントローラを生成する

```
$ rails generate controller StaticPages home help

:::メモ
$ rails generate controller コントローラー名(複数形の名前にする)　アクション名
コントローラーの作成と同時にアクションも生成できる
:::
```

 config/roures.rbにhomeアクションとhelpアクションが定義される

```config/routes.rb
Rails.application.routes.draw do
  get  'static_pages/home'
  get  'static_pages/help'
end
```

 StaticPages内にhomeアクションを追加したため、/static_pages/homeにアクセスすることでページを取得(GET)することができる。

```
$ rails s
```
 生成されたStaticPagesコントローラー 
 コントローラー生成時に自動的にhomeアクションとhelpアクションに対応したview(views/static_pages/)も生成される

```app/controllers/static_pages_controller.rb
class StaticPagesController < ApplicationController
  def home
  end

  def help
  end
end
```
HomeページのHTMLを修正するとHelpページのHTMLを修正して終了。
***

<h2>3.3最初のテスト</h2>
 Aboutページを作成しその際、テストを作成する。また、何らかの変更を行う際は常に『自動化テスト』を作成する習慣を身につける。テストをしっかりと行っていればバグが出た時にも対処しやすくなる。
***
 rails generate controllerを実行した時に生成されたテストを確認してみましょう

```test/controllers/static_pages_controller_test.rb
require 'test_helper'

class StaticPagesControllerTest < ActionDispatch::IntegrationTest

  test "should get home" do
    get static_pages_home_url
    assert_response :success
  end

  test "should get help" do
    get static_pages_help_url
    assert_response :success
  end
end
```
　下のテストはHomeページのテスト。GETリクエストをhomeアクションに対して発行（=送信）せよ。そうすれば、リクエストに対するレスポンスは［成功］になるはず　という意味になる。

```
  test "should get home" do
    get static_pages_home_url
    assert_response :success
  end
```
　テストを実行し、成功するのを確認

```
$ rails db:migrate     # システムによっては必要
$ rails test
2 tests, 2 assertions, 0 failures, 0 errors, 0 skips
```
　Aboutページのテストを書く

```test/controllers/static_pages_controller_test.rb
  test "should get about" do
    get static_pages_about_url
    assert_response :success
  end
```
rails tをするとエラーになる
エラーメッセージを確認する。メッセージによると「AboutページへのURLが見つからない」

```
$ rails test
NameError: undefined local variable or method `static_pages_about_url'
```
 about用のルートを追加する。

```config/routes.rb
 get  'static_pages/about'
```
rails tをするとエラーになる
エラーメッセージを確認する。メッセージによると「StaticPagesコントローラにaboutアクションがない」

```
$ rails test
AbstractController::ActionNotFound:
The action 'about' could not be found for StaticPagesController
```
aboutアクションを追加する。

```app/controllers/static_pages_controller.rb
def about
end
```
rails tをするとエラーになる
エラーメッセージを確認する。メッセージによると「テンプレートがない」

```
$ rails test
ActionController::UnknownFormat: StaticPagesController#about
is missing a template for this request format and variant.
```
 about.html.erbを追加し、編集

```
$ touch app/views/static_pages/about.html.erb
```
rails t するとGREENになる

```
$ rails test
3 tests, 3 assertions, 0 failures, 0 errors, 0 skips
```