1
0

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 3 years have passed since last update.

RailsのRESTfulルーティングを生成するresourcesについて

Last updated at Posted at 2020-11-07

RESTfulについて

例としてユーザー登録をしてもらい会員制のサイトを運営しようと思った時の事を考えてみる。

■会員登録画面を表示する(new)
→入力してもらい、データベースに登録する(create)

■登録した情報の編集画面(edit)を表示
→変更があった場合はデータベースを更新する(update)

■会員一覧の表示(index)

■会員詳細ページの表示(show)

■会員が退会した場合、データベースから削除する(destroy)

このような「あるリソース」をCRUD操作できる状態をRESTfulという。

※CRUDとは「Create」「Read」「Update」「Delete」の頭文字。

RESOURCESで生成されるルーティング

RESTfulなルーティングを設定するにはresourcesを使う。

routes.rb
resources :xxxs
  • xxxs部分はコントローラ名(複数形)にするのが一般的。(EX usersやpostsなど)
  • ORMではURL中にコントローラ名を入れるのが一般的。
  • こちらの記述で7つのルートが規約に沿って生成される。

ルーティングから除外したいアクションがある。

「resources :xxxs」では7つのルートが自動的に生成されるが、「一覧ページは不要」という場合はexceptオプションで不要なアクションを指定する

routes.rb
resources :xxxs, except: [:index]

指定したルートのみ設定したい。

逆に今回は作成だけ出来れば良いという場合がはonlyオプションで指定してやると良い

routes.rb
resources :xxxs, only: [:create]

createのルートのみ生成される。作成ページ、および作成の二つにしたい場合は以下カンマ区切りで

routes.rb
resources :xxxs, only: [:new, :create]

「resources :xxxs」で生成されるルート

生成される基本ルートは7つ。全て暗記しよう。

URLパターン アクション HTTPメソッド 説明 prefix
/xxxs(.:format) index GET 一覧画面を生成 xxxs
/xxxs(.:format) create POST 登録処理
/xxxs/new(.:format) new GET 登録画面を生成 new_xxx
/xxxs/:id/edit(.:format) edit GET 編集画面を生成 edit_xxx
/xxxs/:id(.:format) show GET 詳細画面を生成 xxx
/xxxs/:id(.:format) update PUT / PATCH 更新処理
/xxxs/:id(.:format) destroy DELETE 削除処理

HTTPリクエストに対応するアクションとその役割は確実に理解しておく必要がある。

ルーティングを確認する「rails routes」

以下コマンドをターミナルで実行すると config/routes.rbファイル に記載された内容に沿ったルーティングを表示させることができる。(必ず作成したアプリのディレクトリにcdコマンドで移動してから行う事)

$ rails routes

結果は以下

                   Prefix Verb   URI Pattern                                                                              Controller#Action
                     xxxs GET    /xxxs(.:format)                                                                          xxxs#index
                          POST   /xxxs(.:format)                                                                          xxxs#create
                  new_xxx GET    /xxxs/new(.:format)                                                                      xxxs#new
                 edit_xxx GET    /xxxs/:id/edit(.:format)                                                                 xxxs#edit
                      xxx GET    /xxxs/:id(.:format)                                                                      xxxs#show
                          PATCH  /xxxs/:id(.:format)                                                                      xxxs#update
                          PUT    /xxxs/:id(.:format)                                                                      xxxs#update
                          DELETE /xxxs/:id(.:format)                                                                      xxxs#destroy

※rake routesというコマンドはrails routesと同じ動作をするルーティングを確認するコマンドであるが、rails4時代のコマンドであり、今後rakeコマンドは削除される予定。rails5以上を使っている場合は rails routesを使おう。

##HTTPリクエスト
HTTPリクエストはHTTPメソッドとURLの組み合わせ。
GET + /xxxs をWebサーバにリクエストするとルータ(routes.rb)の設定によりxxxsコントローラがインスタンス化されこのxxxsコントローラのindexアクションが実行される。
indexアクションの役割は一覧画面のレンダリングなので、このアクションは一覧を表示させるようなページを作成する際に使うと良い。

##HTTPメソッド
Railsで使っているのは4つ

HTTPメソッド名 意味
GET リソースの取得(画面の表示やデータ要求)
POST リソースの新規作成
DELETE リソースの削除
PUT / PATCH リソースの更新

Prefixについて

  • Prefixとは、接頭語 という意味。
  • 接頭語とは「後ろに何かをつけて使う語句の事」
  • 後ろに付ける語句は「_path」と「_url」。これらをつけることによってURL(パスを生成する)
  • _pathはViewで使う(相対パス)
  • _urlはControllerで使う(絶対パス)

Viewでの使用例

URLパターン アクション HTTPメソッド 説明 prefix
/xxxs(.:format) index GET 一覧画面を生成 xxxs

例えばPrefixの行がxxxs であれば、Viewでリンクを作成するとき以下のように使う。

<%= link_to "リンク文字", xxxs_path %>

これは以下のようなHTMLに変換される。

<a href="/xxxs">リンク文字</a>

Controllerでの使用例

def アクション名
  redirect_to xxxs_url
end

これは以下の記述と等価になる。

def アクション名
  redirect_to "xxxs"
end
1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?