50
56

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【初心者向け】Rails のRoutesの書き方

Last updated at Posted at 2016-12-04

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
50
56
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
50
56

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?