わたしがRailsチュートリアルで学んだこと【5章】

* 注意：プログラミング歴29日の初心者が書いています

* 注意：間違っていたら優しく教えてください（喜びます）

「Ruby on Rails チュートリアル実例を使ってRailsを学ぼう」
 https://railstutorial.jp/

素晴らしいチュートリアルに感謝します。

#5.1.1 ナビゲーション

##`link_to`について

`link_to`はRailsのヘルパー（viewsで使える関数）です。
最終的には\<a>タグが生成されます。
第1引数はリンクテキスト、第2引数はURLです。

```rb
 link_to "sample app", '#', id:"logo" 
```
カッコが省略されています。関数です。

```rb
 link_to("sample app", '#', id:"logo" )
```

##`image_tag`について

`image_tag`もRailsのヘルパー（viewsで使える関数）です。
最終的には\<img>タグが生成されます。
第1引数は画像のsrc、第2引数はここではalt属性です。

```rb
image_tag("rails.png", alt: "Rails logo")
```

第一引数として、単に画像ファイル名のみを指定した場合は、`asset`ディレクトリ内の`images`ディレクトリから自動で画像を引っ張ってきてくれます。


#5.1.2 BootstrapとカスタムCSS

##アセットパイプラインについて

↓がわかりやすい
「railsのアセットパイプラインについて解説する」@hogehoge1234
https://qiita.com/hogehoge1234/items/9a94ebc93c5f937502cd

アセットパイプラインとは、htmlファイルと、css,javascript, imgファイルを自動で統合できるようにする仕組みです。


そもそも、webサイトの表示は、主に以下の3つをブラウザが読み込むことで実現される。

* htmlファイル

* cssファイル

* JavaScriptファイル

*imgファイル

これらを一つのファイルで実現することは可能だが、わかりやすいように通常は別々のファイルで作って、最後にそれぞれをhtmlファイルにリンクさせる。

Railsにおいては、

* htmlファイルに相当するhtml.erbファイルはviewsディレクトリに保存します。

* cssとJavascriptとimgファイルはassetディレクトリ内部にある、それぞれのディレクトリに保存します。


さらに言うと、cssファイルではなくsassというcssの便利バージョンになっています。sassファイルからcssファイルに変換（コンパイル）しないとブラウザが読み込めないのですが、アセットパイプラインにはコンパイラも含まれています。

つまり、assetディレクトリに入っているファイルたちが、あたかもパイプの中を通りながら1つのファイルに統合されて出てくるようなイメージです。

##Railsサーバーの再起動が必要なタイミング

* Rubyのバージョンを変更したり、

* Gemfileを変更したり、

* Railsの内部クラスから何かを変更した場合は、

再起動する必要があります。

#5.1.3 パーシャル (partial)

##`render`について

renderはヘルパー（viewsに使える関数）の呼び出しをします。
テンプレートを呼び出して表示させるためによく使われます。

テンプレート（要は繰り返し使うhtml部分など）は、partial(パーシャル)という仕組みを使って、コードを一つのファイルにまとめておきます。

その際、パーシャルのファイル名は、`_(アンダースコア)`で始まるファイル名にします。

```rb
render 'layouts/shim'
```

これは、`/_shim.html.erb`というファイルを探してその内容をレンダリング（表示）します。
先頭の`_(アンダースコア)`と`html.erb`などの余分な内容は省略して記述します。

もちろん、パーシャルにするコードは別ディレクトリに用意しておく必要があります。



#5.2.1 アセットパイプライン

##アセットディレクトリについて

`assets`ディレクトリは、その内容によって、以下3つのディレクトリに含まれています。

* `app/assets`: 現在のアプリケーション固有のアセット

* `lib/assets`: あなたの開発チームによって作成されたライブラリ用のアセット

* `vendor/assets`: サードパーティのアセット

それぞれの`assets`ディレクトリの内部には、CSS、JavaScript、Imagesのディレクトリが存在します。



##マニフェストファイルについて

統合させたり読み込ませるCSSやJavaScriptを指定したり設定したりするファイルです。


##プリプロセッサエンジンについて

`.erb`や`.scss`など、拡張子を読み取って、`.html`や`.css`にコンパイルできるように加工してくれます。

##その他の加工について
ファイルすべてに対して 不要な空白やインデントを取り除く処理を行い、ファイルサイズを最小化してくれます。結果として、読み込みが早くなります。

#5.3 レイアウトのリンク

##名前付きルート

```rb
root_path -> '/'
root_url  -> 'http://www.example.com/'
```

例えば、ルートに関してはすでに`root`という名前付きルートが定義されています。
ここに`_path`メソッドや`_url`メソッドを使用することで、名前付きルートの中身を見てみることができます。

```rb
get 'static_pages/help'
```

上記を、以下の名前付きルートに変換します。

```rb
get  '/help', to: 'static_pages#help'
```

読み方は、
『GETリクエスト（ページを取得しろ）が `/help` に送信されたとき、
StaticPagesコントローラーのhelpアクションを呼び出してくれ』です。



```rb
  test "should get help" do
    get help_path #これ
    assert_response :success
    assert_select "title", "Help | Ruby on Rails Tutorial Sample App"
  end
```

テストコードの修正をします。
これは、`help`という名前付きルートに対して、`_path`メソッドを使用し、
`/static_pages/help`というパスを取得しています。


#5.3.4 リンクのテスト

##統合テスト
統合テストは、複数のコントローラの動きをチェックするテストのことです。

```rb
assert_select "a[href=?]", about_path
```
`?`の中身は、第２引数の`about_path`になります。
つまり、`<a href="/about">...</a>`というaboutページへのパスを含む\<a>タグがあるかどうかのチェックです。

```rb
$ rails test:integration
```

上記コマンドで動かします。


#5.4.1 Usersコントローラ

##Usersコントローラの生成 (newアクションを追加)

「newアクション」とは、Railsの7アクションの１つです。何かを新規作成する際のアクションです。

```rb
get  '/signup',  to: 'users#new'
```
ルーティングに`/signup`を追加したことによって、`signup_path`でページへのパスを表現できるようになりました。