ルーティング

# ルーティング　概要
　ルーティングはユーザー(クライアント)からリクエストされたurlとそれに対応するコントローラー内のアクションを紐付けるための役割を持っており、これはroutes.rb内に記述されている。
以下、Rails Tutorialで作成したルーティング。

```ruby:routes.rb
Rails.application.routes.draw do

  root 'static_pages#home'

  get 'static_pages/help' , to: "static_pages#help" , as: "help"

  get 'static_pages/about' , to: "static_pages#about" , as: "about"

  get 'static_pages/contact' , to: "static_pages#contact" , as: "contact"

  get '/signup' , to: "users#new"

  post '/signup', to:"users#create"

  resources :users

  get '/login', to:"session#new"

  post '/login', to:"session#create"

  delete '/logout', to:"session#destroy"

  resources :microposts, only: [:create, :destroy]
end
```
>HTTPメソッド
　GET,POST,PATCH,DELETEがあり、アクションからmodelに対して行う操作に対して使い分ける。以下の表にHTTPメソッドに対応するREST Operation(アクションからmodelを読み取る操作)をする際に定義するアクション名の参考例を示す。

| HTTPメソッド       |REST Operation|対応するアクション名|ユーザが行う動作|
|:----------------:|:------------------:|:---:|:--:|
|GET|READ|制限なし(newなど)|閲覧|
|POST|CREATE|create|登録|
|PATCH|UPDATE|update|更新|
|DELETE|DESTROY|destroy|削除|

###REST fullなルール
　[REST](http://e-words.jp/w/REST.html)はAPIを設計する際の設計の原則を示しているものであり、[Rails TutorialでREST fullなルール](https://railstutorial.jp/chapters/sign_up?version=5.1#sec-a_users_resource)というものが記述されている。
　ルーティングに記述するurlとアクション名は自由に開発者が決めることができるが、コードは他の人にも分かりやすく明瞭に記述する必要があるため、一定のルールが決められている。ここでのルールはHTTPメソッドとそれに対応するアクション名のルールである。
　このREST op.はCreate(作成),Read(読み取り),Update(更新),Delete(削除)の頭文字をとってCRUDととも呼ばれる。

### resourcesヘルパー
　resourcesヘルパーはroutes.rb中で使用されるヘルパーで、resourcesでコントローラー名を定義すると自動でurlを生成してくれるメソッド。以下、実際の使用例とそれに対応するurlを示す。

```ruby:routes.rb
Rails.application.routes.draw do
  resources :users
end
```
```console
Prefix Verb   URI Pattern                     Controller#Action
user       GET    /users/:id(.:format)            users#show
           PATCH  /users/:id(.:format)            users#update
           PUT    /users/:id(.:format)            users#update
           DELETE /users/:id(.:format)            users#destroy
```
　このようにコントローラー内で自動でHTTPメソッド全種類を生成してくれる。

# prefix

### rake routes
```terminal
$ rake routes
    Prefix Verb   URI Pattern                     Controller#Action
      root GET    /                               static_pages#home
      help GET    /static_pages/help(.:format)    static_pages#help
     about GET    /static_pages/about(.:format)   static_pages#about
   contact GET    /static_pages/contact(.:format) static_pages#contact
    signup GET    /signup(.:format)               users#new
           POST   /signup(.:format)               users#create
     users GET    /users(.:format)                users#index
           POST   /users(.:format)                users#create
  new_user GET    /users/new(.:format)            users#new
 edit_user GET    /users/:id/edit(.:format)       users#edit
      user GET    /users/:id(.:format)            users#show
           PATCH  /users/:id(.:format)            users#update
           PUT    /users/:id(.:format)            users#update
           DELETE /users/:id(.:format)            users#destroy
     login GET    /login(.:format)                session#new
           POST   /login(.:format)                session#create
    logout DELETE /logout(.:format)               session#destroy
microposts POST   /microposts(.:format)           microposts#create
 micropost DELETE /microposts/:id(.:format)       microposts#destroy

```

$ rake routes
のコマンドをターミナルで実行することで上記実行画面のようにurlとそれに対応するアクション名を参照することができる。

### prefix
　rake routesで出力したprefixの名称に_pathか_urlを付けることでリンク先として使用することができる。以下に使用例を示す。

```ruby:home.html.erb

<%= link_to "HELP", help_path %>

```

　pathをprefixに付した場合は相対参照で、rootパスを基準とする。
help_pathには'/static_pages/help'が割り当てられ、help_urlには'https://・・・・/static_pages/help'が割り当てられる。