2
2

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/ルーティング】Prefix, URIを好みの値に設定する方法とresourcesについて深ぼる

Last updated at Posted at 2020-11-02

概要

Railsでルーティングを設定する際は「とりあえずresources脳」な僕ですが、今日はふと「自分でURLとか設定したいよな…」と思いました。
今回はそんな思いを叶えるべく、調べた内容をまとめます。
(resourcesの名前の起源も下の方で深ぼってみました!)


環境

  • macOS Catalina 10.15.6

  • ruby 2.6.5

  • Rails 6.0.3.4

  • MySQL : 5.6.47

  • Bootstrap : 4.3.1


結論

「Railsガイド : Railsのルーティング」によると、
例えば「マイページ(users#show)」へのリクエストを次のように表現したいとき。

  • prefix : users_profile

  • URI : '/users/:id/profile'

routes.rbに以下のように記載します。

app/config/routes.rb
Rails.application.routes.draw do
  get 'users/:id/profile', to: 'users#show', as: 'users_profile'
end

これをrails routesで確認すると、

prefix Verb URI Pattern Controller#Action
user_profile GET '/users/:id/profile 'users#show'

無事に設定できました!


確認

では、動作を確認しましょう。

ターミナルでの操作

1. users_controllerを作成

teminal
% rails g controller users

2. ビューファイルの作成と記述

app/views/users/show.html.erbを作成し、次のように記述します。

app/views/users/show.html.erb
<h1>Users#show</h1>

3. URIを直打ちして確認

localhost:3000/users/1/profileと入力し、確認します!

demo

成功です!


そもそもresourcesって何?

望み通りのルーティングを作成できましたが、一つ疑問が残ります。

「いつも使ってるresourcesって何者?」

というわけで、またまたRailsガイドから引用します。

リソースベースのルーティング (以下リソースルーティング) を使うことで、リソースベースで構成されたコントローラに対応する共通のルーティングを手軽に宣言できます。リソースフルなルーティングを宣言することで、コントローラのindex、show、new、edit、create、update、destroyアクションを個別に宣言しなくても1行で宣言が完了します。

この記述より、resources :usersなどは「7つのアクションを持つリソースフルなルーティング」ということができそうです。

しかし、次は「リソースとは何ぞ?」と思いました。もう少し読み進めましょう。

ブラウザはRailsに対してリクエストを送信する際に、特定のHTTPメソッド (GET、POST、PATCH、PUT、DELETEなど) を使って、URLに対するリクエストを作成します。上に述べたHTTPメソッドは、いずれもリソースに対して特定の操作の実行を指示するリクエストです。リソースルーティングでは、関連するさまざまなリクエストを1つのコントローラ内のアクションに割り当てます。

これでもイマイチ微妙です。
ということで「Web リソース とは」とGoogleで検索してみました。

メタディスクリプションをサラッと読んで内容をまとめると「Webリソース=Webサイトを構成するもの」とのこと。

自分なりに噛み砕いてみると、Webを構成するものとは、

  • ページ
  • 保存された情報
  • 投稿を保存するテーブル

であるならば、例えば...

  • 一覧情報、かつそれをまとめたページを返すindexアクション
  • 新たにテーブルにデータを保存するcreateアクション
  • 既に存在するデータを削除するdestroyアクション

これらのような「Web上のリソースを扱うアクション」をリクエストするルーティングを、リソースルーティングと呼ぶのにも納得がいきます。
なるほど、だからresourcesだったんですね...


まとめ

  • Verb 'URI', to: 'Controller#Action', as: 'Prefix'

  • 上の記述で所望のルーティングを作成できる

  • resourcesは「Webリソースを扱うアクションにリクエストするルーティング」という意味で用いられる(と予想している)

2
2
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
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?