チュートリアル3章

StaticPagesコントローラ作って、homeとhelpアクションを追加。viewとテストも自動で。

```ruby:ubuntu
rails generate controller StaticPages home help
#戻すには
rails destroy  controller StaticPages home help
```
コントローラを作ったので、ルートに追加。

```ruby:config/routes.rb
  get  'static_pages/home'
  get  'static_pages/help'
```
home/help viewを修正

```ruby:help.html.erb
<h1>Help</h1>
<p>
  Get help on the Ruby on Rails Tutorial at the
  <a href="https://railstutorial.jp/help">Rails Tutorial help page</a>.
  To get help on this sample app, see the
  <a href="https://railstutorial.jp/#ebook"><em>Ruby on Rails Tutorial</em>
  book</a>.
</p>

```

```ruby:home.html.erb
<h1>Sample App</h1>
<p>
  This is the home page for the
  <a href="https://railstutorial.jp/">Ruby on Rails Tutorial</a>
  sample application.
</p>

```
テスト書く

```ruby:test/controllers/static_pages_controller_test.rb

 require 'test_helper'

class StaticPagesControllerTest < ActionDispatch::IntegrationTest

  test "should get home" do
    get static_pages_home_url #GETリクエストを受け付けるか？
    assert_response :success
  end #リクエストに対するレスポンスは成功か？

  test "should get help" do
    get static_pages_help_url
    assert_response :success
  end
end
```
テストは最初に間違える
テストにaboutアクションを追加する

```ruby:test/controllers/static_pages_controller_test.rb

test "should get about" do
    get static_pages_about_url
    assert_response :success
  end
```
ここではもちろんテストをしてもエラーになる

ルートに追加する

```ruby:route.rb
get  'static_pages/about'
```
まだテストしても失敗。

```ruby:controllers
  def about
  end
```
viewを追加する。

```ruby:ubuntu
touch app/views/static_pages/about.html.erb
```

```ruby:about.html.erb
 <h1>About</h1>
<p>
  <a href="https://railstutorial.jp/">Ruby on Rails Tutorial</a>
  is a <a href="https://railstutorial.jp/#ebook">book</a> and
  <a href="https://railstutorial.jp/#screencast">screencast</a>
  to teach web development with
  <a href="http://rubyonrails.org/">Ruby on Rails</a>.
  This is the sample application for the tutorial.
</p>
```

これでテストは成功する。


タイトルのテストを追加する


```ruby:test
test "should get home" do
    get static_pages_home_url
    assert_response :success
    assert_select "title", "Home | Ruby on Rails Tutorial Sample App" #追加分（help,aboutにも追加する）
  end
```
viewにタイトルをつけていく

```ruby:home.html.erb
<!DOCTYPE html>
<html>
  <head>
    <title>Home | Ruby on Rails Tutorial Sample App</title>
  </head>
  <body>
    <h1>Sample App</h1>
    <p>
      This is the home page for the
      <a href="https://railstutorial.jp/">Ruby on Rails Tutorial</a>
      sample application.
    </p>
  </body>
</html>
```


```ruby:help.html.erb
<!DOCTYPE html>
<html>
  <head>
    <title>Help | Ruby on Rails Tutorial Sample App</title>
  </head>
  <body>
    <h1>Help</h1>
    <p>  Get help on the Ruby on Rails Tutorial at the
      <a href="https://railstutorial.jp/help">Rails Tutorial help
      page</a>.
      To get help on this sample app, see the
      <a href="https://railstutorial.jp/#ebook">
      <em>Ruby on Rails Tutorial</em> book</a>.
    </p>
  </body>
</html>
```
```ruby:about
<!DOCTYPE html>
<html>
  <head>
    <title>About | Ruby on Rails Tutorial Sample App</title>
  </head>
  <body>
    <h1>About</h1>
    <p>
      <a href="https://railstutorial.jp/">Ruby on Rails Tutorial</a>
      is a <a href="https://railstutorial.jp/#ebook">book</a> and
      <a href="https://railstutorial.jp/#screencast">screencast</a>
      to teach web development with
      <a href="http://rubyonrails.org/">Ruby on Rails</a>.
      This is the sample application for the tutorial.
    </p>
  </body>
</html>
```
これでテストが通る。

タイトルが重複してるのでprovideメソッドを使ってページ毎に簡潔に変えれるようにする

```ruby:home.html
<% provide(:title, "Home") %> #追加分
<!DOCTYPE html>
<html>
  <head>
    <title><%= yield(:title) %> | Ruby on Rails Tutorial Sample App</title>　#追加分
  </head>
  <body>
    <h1>Sample App</h1>
    <p>
      This is the home page for the
      <a href="https://railstutorial.jp/">Ruby on Rails Tutorial</a>
      sample application.
    </p>
  </body>
</html>
```

しかし3ファイルともタイトル辺りは同じなので統一します。

```ruby:/layouts/application.html.erb
<!DOCTYPE html>
<html>
  <head>
    <title><%= yield(:title) %> | Ruby on Rails Tutorial Sample App</title>
    <%= csrf_meta_tags %>　#Web攻撃を防ぐrailsのメソッド
    <%= stylesheet_link_tag    'application', media: 'all',
                               'data-turbolinks-track': 'reload' %> #Asset Pipelineの一部
    <%= javascript_include_tag 'application',
                               'data-turbolinks-track': 'reload' %> #Asset Pipelineの一部
  </head>

  <body>
    <%= yield %>　#ここにhome.htmlなどが入るようになる
  </body>
</html>
```
このapplication.htmlに入力したので、homeなどから入力した部分を除きます。

```ruby:home.html.erb
<% provide(:title, "Home") %>
<h1>Sample App</h1>
<p>
  This is the home page for the
  <a href="https://railstutorial.jp/">Ruby on Rails Tutorial</a>
  sample application.
</p>

```

```ruby:help.html
<% provide(:title, "Help") %>
<h1>Help</h1>
<p>  Get help on the Ruby on Rails Tutorial at the
  <a href="https://railstutorial.jp/help">Rails Tutorial help section</a>.
  To get help on this sample app, see the
  <a href="https://railstutorial.jp/#ebook"><em>Ruby on Rails Tutorial</em>
  book</a>.
</p>
```
```ruby:about.html
<% provide(:title, "About") %>
<h1>About</h1>
<p>
  <a href="https://railstutorial.jp/">Ruby on Rails Tutorial</a>
  is a <a href="https://railstutorial.jp/#ebook">book</a> and
  <a href="https://railstutorial.jp/#screencast">screencast</a>
  to teach web development with
  <a href="http://rubyonrails.org/">Ruby on Rails</a>.
  This is the sample application for the tutorial.
</p>
```

表示は変わらないがコードの量が減った。
routeファイルのrootを変更

```ruby:route.rb
root 'static_pages#home'
```

演習
rootを追加したのでrootのテストを書く

```ruby:test
test "should get root" do
    get root_url
    assert_response :success
  end
```

gitにpushして終わり。