前提
Railsチュートリアル 第2章 - Toyアプリケーション - ユーザーページの挙動からの続きです。
ホストは以下の状態であることを前提としています。
>>> pwd
~/docker/rails_tutorial_test/toy_app
Rails用のDockerコンテナが実行されており、以下の状態であることを前提としています。
# pwd
/var/www/toy_app
# rails server
=> Booting Puma
=> Rails 5.1.6 application starting in development
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.9.1 (ruby 2.5.1-p57), codename: Private Caller
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://0.0.0.0:3000
Use Ctrl-C to stop
{この時点の状態}
現時点におけるgit status
と、それに対して私がとった対処
rails generate scaffold
の実行以降にGitのコミットは行っていないため、この時点でgit status
には「Changes not staged for commit」として出現します。
>>> git status
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: config/routes.rb
Untracked files:
...略
私は、一旦この時点でtoy_app
以下の全てのファイルをGitの追跡対象とした上でコミットしました。
Railsアプリケーションにおいて、特定のURLで示されたリソースをブラウザで開くとき、アプリケーション内部では何が起こっているのか
「/users にあるindexページをブラウザで開く」という操作をしたときのRailsサーバーの挙動について、Railsチュートリアルには以下のようにあります。
- ブラウザから「/users」というURLのリクエストをRailsサーバーに送信する。
- 「/users」リクエストは、Railsのルーティング機構 (ルーター) によってUsersコントローラ内のindexアクションに割り当てられる。
このうち、「Railsのルーティング機構 (ルーター) 」の挙動について記述する設定ファイルが、config/routes.rb
であるということになります。
config/routes.rb
の記述
現時点におけるRailsサーバー内のconfig/routes.rb
には、以下のような記述があります。
Rails.application.routes.draw do
resources :users
root 'application#hello'
end
resources: users
というのは、rails generate scaffold
により自動で生成される、users
リソースに対する複数のルーティングを自動で定義するための処理です。初心者じゃなくても役に立つかもしれないRailsのroutingの記述方をまとめてみた - まっしろけっけというBlog記事に、resources: users
で自動作成されるルーティングの一覧について記載があります。
一方、root 'application#hello'
というのは、「/」を開いたときのルーティングの定義についての記述となります。Railsチュートリアルの本文に記載されているとおり、「Applicationコントローラ内のhello
アクションにルーティングされる」という動作をします。
「/」を開いたときの動作を変更する
今回ソースコードを書き換えて実現したい処理は、Railsチュートリアルに記載された以下の処理です。
サーバーのルートURLにアクセスしたら、デフォルトのページの代わりにユーザー一覧を表示するようにします。つまり、「/」(スラッシュ) にアクセスしたら/usersを開くようにします。
config/routes.rb
の内容を、以下の差分で示すとおりに変更すれば、期待する動作が実現できるはずです。
Rails.application.routes.draw do
resources :users
- root 'application#hello'
+ root 'users#index'
end
実際に以上の変更を行った上で、改めて「/」にアクセスしてみます。
期待する動作が実現できているようです。このとき、rails server
は以下のメッセージを返しました。
Started GET "/" for 172.17.0.1 at 2019-08-01 07:57:08 +0000
Cannot render console from 172.17.0.1! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
Processing by UsersController#index as HTML
Rendering users/index.html.erb within layouts/application
User Load (6.7ms) SELECT "users".* FROM "users"
Rendered users/index.html.erb within layouts/application (54.8ms)
Completed 200 OK in 632ms (Views: 472.4ms | ActiveRecord: 29.5ms)
users/index.html.erb
という、いかにもusers#index
と関係ありそうなリソース名が登場していますね。また、ユーザーデータを一覧表示するため、SELECT "users".* FROM "users"
というSQL文が呼び出されています。