らくだ🐫にもできるRailsチュートリアル|2.2

2.2 Usersリソース

Webインターフェイスとはなんぞ

一言で言おうとすると逆によくわからなくなる感じなのですが、webから操作するための仕組み的な?
railsで言うとviewとかcontrollerあたりがそれにあたるのかな。と思っています。

リソースとは

それぞれのデータを作ったり・呼び出したり・更新したり・削除したりできるようにした一塊の仕組み
Usersリソースなら「user」の情報を色々する為の、UsersモデルとWebインターフェイスを合わせたもの。

この辺は多分「こういうもの」っていう意識を持っていればいいのかな。と思います。

ターミナル
$ rails generate scaffold User name:string email:string
#name:string email:stringを持つUsersリソースをscaffoldジェネレータで生成
$ rails db:migrate
#生成されたファイルに則りデータベースを設定するコマンド

rails generate scaffold~によって、データベースを設定するためのファイル(/toy_app/db/migrate/20190509105455_create_users.rb)が自動生成されている
このファイルに則ってデータベースの設定をしてもらうとサーバーが実行できるようになる

作業用とは別のターミナルを開く
$ rails server

2.2.1 ユーザーページを探検する

現在ルートURLを開くと「hello, world!」が表示されるようになっているがそれ以外のページもすでに用意されている
ただし出来立ての状態ではユーザーのデータはまだないので「/users/1」と「/users/1/edit」を表示させようとするとエラーになる。「/users/new」でデータを登録した後では表示される
以降本文に沿って機能のお試し

演習

CSSを知っている読者へ: 新しいユーザーを作成し、ブラウザのHTMLインスペクター機能を使って「User was successfully created.」の箇所を調べてみてください。ブラウザをリロードすると、その箇所はどうなるでしょうか?

HTMLインスペクター機能→chromeで言う所のデベロッパーツール(winではCtrl+shift+i、もしくは設定ー→その他のツール→デベロッパーツール、もしくは右クリック→検証)

ブラウザのデベロッパーツール
<p id="notice">User was successfully updated.</p>
#↑これが↓こうなる
<p id="notice"></p>

emailを入力せず、名前だけを入力しようとした場合、どうなるでしょうか?
「@example.com」のような間違ったメールアドレスを入力して更新しようとした場合、どうなるでしょうか?

どちらも問題なく登録できてしまう(本来は良くないのでエラーになりたい)

上記の演習で作成したユーザーを削除してみてください。ユーザーを削除したとき、Railsはどんなメッセージを表示するでしょうか?

ブラウザ
User was successfully destroyed.

2.2.2 MVCの挙動

ざっくりでも雰囲気でもいいのでこの仕組みを頭に入れておくと
「何のために何をしているのか」がイメージしやすくなる気がします。

ルーティングを変更してみる

/toy_app/config/routes.rb
Rails.application.routes.draw do
  resources :users      
  #この部分の解説は4.3.3との事
  #ざっくり言うとscaffoldで自動生成されたUsersリソースのルーティングを纏めているもの
  root 'users#index'
  #ルートURLにアクセスしたら UsersControllerのindexアクションを実行
end

プレビューを見るとルートURLにusers/index.html.erb(ユーザー一覧)が表示されている

Usersコントローラ

内容はscaffoldで自動生成されている
アクションに対応するURLが重複しているものもあるが、リクエストがPOSTなのかGETなのかの違いがある(3.3で詳しく説明されるとの事)
3.2.1の「コラム3.2. GETやその他のHTTPメソッド」で説明されています)

以下説明通り

演習

図 2.11を参考にしながら、/users/1/edit というURLにアクセスしたときの振る舞いについて図を書いてみてください。

  1. ブラウザから「/users/1/edit」のリクエスト
  2. routes.rbによってUsersコントローラのeditアクションが割り当てられる
  3. editアクションが実行され、idが1のユーザーデータを取り出すように問い合わせる
  4. Userモデルはidが1のユーザーをデータベースから取り出す
  5. 取り出したユーザーのデータをUsersコントローラに返す
  6. usersコントローラは受け取ったユーザーのデータを@userに保存しedit.html.erbに渡す
  7. editビューが起動し、ERBを実行してHTMLを生成
  8. Users Controllerはビューで生成されたHTMLをブラウザに返す

※本文の図解に当てはめてみていただければー

図示した振る舞いを見ながら、Scaffoldで生成されたコードの中でデータベースからユーザー情報を取得しているコードを探してみてください。

/toy_app/app/controllers/users_controller.rb
・
・
・
    #らくだ🐫の環境では66行目
    def set_user
      @user = User.find(params[:id])
    end
・
・
・

ユーザーの情報を編集するページのファイル名は何でしょうか?

/toy_app/app/views/users/edit.html.erb

2.2.3 Usersリソースの欠点

本文ママ

まとめとか感想

そろそろ難しい話も増えてきましたが
「詳しくは後程説明」な部分も多いし、何となく付いて行けていればいいのかなって思います。

らくだ🐫にもできるRailsチュートリアルとは

「ド」が付く素人のらくだ🐫が勉強するRailsチュートリアルの学習記録です。
自分用に記録していますが、お役に立つことがあれば幸いです。

調べたとはいえらくだ🐫なりの解釈や説明が含まれます。間違っている部分もあるかと思います。そんな所は教えて頂けすと幸いなのですが、このブログにはコメント機能がありません💧お手数おかけしますがTwitterなどでご連絡いただければ幸いです