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