rails tutorial3章進めた時の覚書

頭に入れる。めっちゃ大事な構造
![mvc_detailed.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/198412/f94b29b3-ed67-20e0-763c-914c4852fcdb.png)
----


*残りのチュートリアルでは、3章のアプリケーションを例題として扱って学習していくことになります。*

GitHubの完成版サンプル https://github.com/yasslab/sample_apps

SQLiteの方がPostgreSQLよりもローカルでのインストールや設定がずっと楽なので、今回は異なるデータベースを使うことにします4 。

rails new した後、 git init するんだ。ほお


```
$ git push -u origin master
```

-uとは
> このコマンドでoriginにマスターブランチをpushし、ローカルブランチの上流がorigin masterへと移ることになる。

引用: https://qiita.com/shumpeism/items/1b8027c8905ca826416d

これ何してる？

```
$ heroku create
```

> コントローラとは（基本的に動的な）Webページの集合を束ねるコンテナのことです
その都度トピックブランチを作成して作業するのがよい習慣です。Gitでバージョン管理を行っているのであれば、次のコマンドを実行して、静的なページ用のトピックブランチをチェックアウトしましょう。

> generate スクリプトで、コントローラを生成することから始めます。

aboutページ、homeページ、helpページなどページ毎にアクションを製作するイメージ


> 本チュートリアルを進めるときは、セクションが終わるたびにGitにコミットしておくのがよい方法です

わかりやした。

> Rubyがクラス名にキャメルケースを使う慣習があり（詳細は4.4で説明します）、また、キャメルケースの名前を使うことが好まれているためです。

*rails generate* で生成したファイルを削除したい・元に戻したいときは、 *rails destroy*
ただファイルを削除するだけではダメという事はさっくり覚えておく。

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

これ何してるん？
routes.rbに

```rb
Rails.application.routes.draw do
  get 'static_pages/home'
  get 'static_pages/help'
  # For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html
  root'application#hello'
end
```

生成されてた。
static_pagesコントローラーの、homeアクションをルーティングしている？？

```
get 'static_pages/home'
# /static_pages/homeというURLに対するリクエストを、StaticPagesコントローラのhomeアクションと結びつけています。今回はgetと書かれているため、GETリクエストを受け取ったときに対応するアクションを結びつけています。

# getはGETリクエストを受けトゥ田時に対応するアクションを結びつけてるよ
```

なるほどね。URLに対するリクエストを、コントローラのアクションと結びつけているとな。

```
$rails s
/static_pages/home にアクセス
```

> Railsアプリケーションでは、POSTリクエストは何かを作成するときによく使われます
例えばユーザー登録フォームで新しいユーザーを作成するときは、POSTリクエストを送信します。

Q. fooというコントローラーを生成してください

```
$rails g controller Foo  bar baz
```

Q. Fooコントローラーを削除してください

```
$rails destroy controller Foo bar baz
```

##3.2.2静的なページの調整
> 重要なのは「Railsのビューの中には静的なHTMLがある」という点
Railsの知識が無くてもHomeページやHelpページを修正できることを意味しています

help.html.erbのコード書き換えると普通に見た目変わる。
サイト製作と何ら変わらないな。

##3.3テストから始める
> 何らかの変更を行う際には、常に「自動化テスト」を作成して、機能が正しく実装されたことを確認する習慣をぜひ身に付けましょう。
テストを作成するということは、その分コードを余分に書くことになりますが、正しく行えば、むしろテストがないときよりも確実に開発速度がアップします
テストに関しては、原則として手軽かつ直感的なアプローチを採用し、必要に応じてTDDに切り替えるようにしています

テストはいつ書けばいいのか: https://railstutorial.jp/chapters/static_pages?version=6.0#aside-undoing_things

##3.3.1最初のテスト
> rails generate controller（リスト 3.7）を実行した時点でテストファイルがちゃんと作成されている

マジ？
test/controllers/static_pages_controller_test.rb
マジやん。
testフォルダがあるんだ。えぐ。

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

>言葉で表すと「Homeページのテスト。GETリクエストをhomeアクションに対して発行（=送信）せよ。そうすれば、リクエストに対するレスポンスは［成功］になるはず」となります。

テストの実行コマンド

```
$rails test
Finished in 5.905413s, 0.3387 runs/s, 0.3387 assertions/s.
2 runs, 2 assertions, 0 failures, 0 errors, 0 skips
```

そのまんまやな。

##3.4少しだけ動的なページ
>「 red ・ green ・ REFACTOR」のサイクルをすべて行うことにします。
ページタイトルの簡単なテストを書き（ red ）、
3つのページにタイトルを追加し（ green ）、
レイアウトファイルを活用してコードの重複を解決します（REFACTOR）。

>assert_selectメソッドでは、特定のHTMLタグが存在するかどうかをテスト

##3.4.3レイアウトと埋め込みRuby（Refactor）
> 重複を取り除くテクニックの１つとして、ビューで「埋め込みRuby」（Embedded Ruby）が使えます
Railsのprovideメソッドを使ってタイトルをページごとに変更


```erb
<% provide(:title, "Home") %>
```

Railsのprovideメソッドを呼び出し
"Home"という文字列と:titleというラベルを関連付け

「<% ... %>」と書くと、中に書かれたコードを単に実行するだけで何も出力しません。「<%= ... %>」のように等号を追加すると、中のコードの実行結果がテンプレートのその部分に挿入

##演習
contactページ生成せよ

staticフォルダにcotact.html.erb作成
controllers/static_pages_controller.erbにcontact Action追加
routes.erbファイルに、```get 'static_pages/contact'```追加

##3.4.4ルーティングの設定
rootにアクセスした時に任意のアクションを表示させる
routes.erbファイルに```root'static_pages#home'```追加

あれ、/ではなくて#使ってる。何で

##3.5.1本章のまとめ
- railsアプリケーション作った
- gemのインストール、リモートリポジトリにプッシュ
- コントローラの新規作成 rails g controller ControllerName アクション名(省略可)
- ERB埋め込み
- テスト作成
- 静的ファイルを動的に変更し、重複を解決