56

この記事は最終更新日から3年以上が経過しています。

@ShuntaShirai

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

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
ユーザー登録して、Qiitaをもっと便利に使ってみませんか。
  1. あなたにマッチした記事をお届けします
    ユーザーやタグをフォローすることで、あなたが興味を持つ技術分野の情報をまとめてキャッチアップできます
  2. 便利な情報をあとで効率的に読み返せます
    気に入った記事を「ストック」することで、あとからすぐに検索できます
ShuntaShirai

コメント

この記事にコメントはありません。
あなたもコメントしてみませんか :)
ユーザー登録
すでにアカウントを持っている方はログイン
記事投稿イベント開催中
Azure IoTに関する記事を投稿しよう!
~
Qiita 10周年記念イベント - 10年前の自分に伝えたい、勉強しておきたかった技術
~