「どの URL にアクセスされたら、どのコントローラのどのアクションを呼ぶか」
を決める仕組みです。
\config\routes.rb で設定します。
REST とは、
REpresentational State Transfer の略で、
「Web アプリを、統一されたルールで設計する」
という考え方(設計思想) の一つです。
REST に忠実に従っている事を RESTful と言います。
Rails はこの RESTful な設計を 前提として作られたフレームワークです。
WEBアプリにアクセスする際に使用する URL も RESTful 前提になります。
細かな話は割愛しますが、
User での一例を挙げると、
| 動作 | HTTP | ルーティング |
|---|---|---|
| 一覧表示 | GET | /users |
| 新規追加 | POST | /users |
| 詳細表示 | GET | /users/1 |
| 編集画面 | GET | /users/1/edit |
| 更新 | PATCH | /users/1 |
| 削除 | DELETE | /users/1 |
ルーティング中で 1 とあるのは、対象データの ID が 1 の場合。
ブラウザで、User の一覧を見たければ、
http://localhost:3000/users
と入力します。
ブラウザ操作では、基本 HTTP GET しか使えないので、
POST、PATCH、DELETE は View のコードで設定します。
詳細は割愛します。
実際に呼び先を指定するファイルです。
多くは、rails generate 系コマンドを実行した際に自動で設定されますが、
独自アクションを追加する際には、手で編集します。
resources :users
と書けば、User に関する CRUD の基本部分を網羅してくれます。
独自アクション GET additional1 を追加する場合は、
resources :users do
collection do
get "additional1"
end
end
と書きます。
http://localhost:3000/users/additional1
でアクセスできます。
ID を指定する GET additional2 アクションの場合は、
resources :users do
member do
get "additional2"
end
end
と書きます。
http://localhost:3000/users/1/additional2
といった形式でアクセスできます。
コード中、指定の URL にジャンプさせたい事があります。
<a href="http://localhost:3000/users/additional1">additional1</a>
みたいに直に書いてしまうと、
本番環境などで localhost:3000 部分が変わってしまう場合に困ります。
Rails では、routes.rb にルーティングを書くと、
自動的にそのルーティングに対応する URL、PATH を生成してくれます。
例えば、
一覧表示の /users であれば、
localhost:3000 部分が変わったら、自動で追従してくれます。http://localhost:3000/users/additional1なら、
additional1_users_path、additional1_users_url ですし、
http://localhost:3000/users/1/additional2なら
additional2_user_path(1)、additional2_user_url(1) になります。
_user_ と _users_、単数形と複数形があることに留意ください。
対象データが1つの場合は _user_、
対象データが複数の場合は _users_、
となります。
このように、Rails では表記上でも単複の違いが明確に区別されます。