LoginSignup
0
0

More than 3 years have passed since last update.

Railsチュートリアル 第2章 - Toyアプリケーション - Usersリソースの挙動を変更する

Posted at

前提

Railsチュートリアル 第2章 - Toyアプリケーション - ユーザーページの挙動からの続きです。

ホストは以下の状態であることを前提としています。

zsh
>>> pwd
~/docker/rails_tutorial_test/toy_app

Rails用のDockerコンテナが実行されており、以下の状態であることを前提としています。

bash
# 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」として出現します。

zsh
>>> 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チュートリアルには以下のようにあります。

  1. ブラウザから「/users」というURLのリクエストをRailsサーバーに送信する。
  2. 「/users」リクエストは、Railsのルーティング機構 (ルーター) によってUsersコントローラ内のindexアクションに割り当てられる。

このうち、「Railsのルーティング機構 (ルーター) 」の挙動について記述する設定ファイルが、config/routes.rbであるということになります。

config/routes.rbの記述

現時点におけるRailsサーバー内のconfig/routes.rbには、以下のような記述があります。

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の内容を、以下の差分で示すとおりに変更すれば、期待する動作が実現できるはずです。

config/routes.rb
 Rails.application.routes.draw do
   resources :users
-  root 'application#hello'
+  root 'users#index'
 end

実際に以上の変更を行った上で、改めて「/」にアクセスしてみます。

スクリーンショット 2019-08-01 16.57.29.png

期待する動作が実現できているようです。このとき、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文が呼び出されています。

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