1. ShuntaShirai

    Posted

    ShuntaShirai
Changes in title
+【初心者向け】Rails のRoutesの書き方
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,86 @@
+## rails におけるルーターの役割とは
+Railsのルーターは受け取ったURLを認識し、それを適切なコントローラー内のアクションに割り当てるために存在する。ルーターではここで定義されるパスやURLをビューで直接ハードコードすることを避けるためのパスやURLを生成することも出来る。
+
+## 基本的なURLをroutesのコードに割り振る書き方
+以下のHTTPリクエストをrailsアプリケーションで受け取れるようにするならば、
+
+```
+GET /user/14
+```
+
+それにマッチするroutesの書き方は以下となる。
+
+```
+get 'user/edit/:id' to: 'user#edit'
+```
+
+このリクエストはuserコントローラーのeditアクションに割り当てられ、paramsにはid:14がはいる。
+
+パラメータで渡すidを数値のみしたいときなどは正規表現でしているすることが出来る。
+```
+get 'user/:id' to: 'user#show', id: /\d+/
+```
+
+また、以下のように書くことで、viewなどでルーティングヘルパーを使用することが出来る。
+```
+get 'user/:id' to: 'user#show', as: 'user_show'
+```
+
+viewではこのようにして書くことが出来る。
+```
+<%= link_to '編集', user_show_path(@user) %>
+```
+
+## リソースベースのRailsのデフォルトの書き方
+リソースフルな書き方を適用することで、コントローラーに対応する、index、show、new、edit、create、update、destryアクションを個別に宣言しなくても一行で定義できる。
+そして、ブラウザがRailsに対してリクエストを送信する際に使用するGET、POST、PATCH、PUT、DELETEなどHTTPメソッドをそれぞれのアクションに割り当ててくれる。
+
+例えば
+```
+DELETE /user/13
+```
+というリクエストに対して
+
+```
+resource :users
+```
+をroutesに定義しておけば、勝手にUserコントローラー内のdestroyアクションに割り当ててくれる。
+上記一つを定義するだけで、以下のroutesが自動的に作成される。
+
+```
+GET /users users#index
+GET /users/new users#new
+POST /users users#create
+GET /users/:id users#show
+GET /users/:id/edit users#edit
+PATCH/PUT /users/:id users#update
+DELETE /users/:id users#destroy
+```
+
+デフォルトで作成される7つのルーティングに他のアクションを追加するには以下の用に定義する。
+```
+resources :user do
+ get 'preview' on: :member
+end
+```
+
+## その他
+- routesは上に定義されたものから優先的に読まれていく
+- namespaceの定義
+ - コントローラーを名前空間によってグループ化出来る。
+
+```
+namespace :mobile do
+ resouces :users,
+end
+```
+
+- resourcesは以下のようにネストすること複数のオブジェクトを扱える。
+※ネストすることでルーティングが扱いづらくなってしまうので、二回以上は推奨されていない。
+
+```
+resources :user do
+ resouces :article
+end
+```
+