Rails Tutorial 第三章　簡易まとめ （コントローラ生成まで）

#セットアップ

```rb:sample_appの生成

$ cd ~/workspace
$ rails _5.1.2_ new sample_app
$ cd sample_app/
```
基本二章と同じだが、今回はテストグループを用意

```rb:gemfile

source 'https://rubygems.org'

gem 'rails',        '5.1.2'
gem 'puma',         '3.9.1'
gem 'sass-rails',   '5.0.6'
gem 'uglifier',     '3.2.0'
gem 'coffee-rails', '4.2.2'
gem 'jquery-rails', '4.3.1'
gem 'turbolinks',   '5.0.1'
gem 'jbuilder',     '2.7.0'

group :development, :test do
  gem 'sqlite3', '1.3.13'
  gem 'byebug',  '9.0.6', platform: :mri
end

group :development do
  gem 'web-console',           '3.5.1'
  gem 'listen',                '3.0.8'
  gem 'spring',                '2.0.2'
  gem 'spring-watcher-listen', '2.0.1'
end

group :test do
  gem 'rails-controller-testing', '1.0.2'
  gem 'minitest-reporters',       '1.1.14'
  gem 'guard',                    '2.13.0'
  gem 'guard-minitest',           '2.4.4'
end

group :production do
  gem 'pg', '0.18.4'
end

# Windows環境ではtzinfo-dataというgemを含める必要があります
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

```

```
$ bundle update
$ bundle install --without production
$ git init
$ git add -A
$ git commit -m "Initialize repository"
```
同じ流れ。


最初のアプリケーションのときと同様に、まずはアプリケーションのルートディレクトリにあるREADME.mdファイルを更新して、具体的な作業内容をわかりやすく記入

[README](https://railstutorial.jp/chapters/static_pages?version=5.1#code-sample_app_readme)




書き終わったら、この変更をコミットします。

```
$ git commit -am "Improve the README"
```

後でproduction環境にプッシュするときに悩まずに済むよう、アプリをなるべく早い段階でHerokuにデプロイしておくとよいでしょう
(RailsのデフォルトのページはHeroku上ではうまく表示されない仕様になっています。このため、次のような変更を加えないとデプロイが成功したかどうかが分かりづらい、というのが本当の理由です。)

helloアクションをApplicationコントローラーに追加する

```rb:app/controllers/application_controller.rb
 class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception

  def hello
    render html: "hello, world!"
  end
end
```

 ルートルーティングを設定する

```rb:config/routes.rb
 Rails.application.routes.draw do
  root 'application#hello'
end
```

終わったら、次のように変更をコミットしてHerokuにプッシュします。

```
$ git commit -am "Add hello"
$ git push
$ heroku create
$ git push heroku master

```

#静的ページの生成

##コントローラ生成
ブランチをきって
```
$ git checkout -b static-pages
```

コントローラーと共にアクションの追加

```
$ rails generate controller StaticPages home help
```
```rb
$ git add -A
$ git commit -m "Add a Static Pages controller"
$ git push -u origin static-pages #ブランチ名
```

最後のコマンドでは、static-pagesトピックブランチをBitbucketにプッシュしています。以後は、git push でok

StaticPagesコントローラ内のhomeアクションとhelpアクションで使うルーティング

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

サーバーを立ち上げて/static_pages/homeにアクセスして結果を表示してみる

###(コラム)元に戻すDestroyコマンド、Rollbackコマンド

自動生成されたコードを元に戻すためには、新規作成されたファイルを削除するだけではなく、既存のファイルに挿入されたコードも削除する必要がある。このようなときは、「generate」という言葉に因んで、rails destroyというコマンドを実行することで元に戻すことができます。例えば次の2つのコマンドは、自動生成と、それに対応する取り消し処理の例です。               

```
$ rails generate controller StaticPages home help
$ rails destroy  controller StaticPages home help**
```


また、第2章でも簡単に紹介しましたが、マイグレーションの変更を元に戻す方法も用意されています。詳細は第6章で説明しますが、簡単に紹介すると、まずdb:migrateでデータベースのマイグレーションを変更します。
元に戻したいときは、db:rollbackで1つ前の状態に戻します。 

```
  $ rails db:migrate
  $ rails db:rollback
```


最初の状態に戻したいときは、VERSION=0オプションを使います。

```
  $ rails db:migrate VERSION=0
```

マイグレーションは逐次的に実行され、**それぞれのマイグレーションに対してバージョン番号**が付与されます。したがって、上記の0を別の数字に置き換えることによって、指定したバージョンの状態に戻すことができます。


##ビューとは
ブラウザを開いたときの情報は何処にはいっているか。
home,helpアクションが空になっているので、/static_pages/homeにアクセスしても、単に対応するビューが出力されるだけとなっている。
ここでいうとcontrollコマンドが実行された際に同時に作られた以下である。
確認と同時に引用書き換え。

```rb:app/views/static_pages/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>
```

```rb:app/views/static_pages/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>
```