Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

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
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした