らくだ🐫にもできるRailsチュートリアル|2.2
2.2 Usersリソース
Webインターフェイスとはなんぞ
一言で言おうとすると逆によくわからなくなる感じなのですが、webから操作するための仕組み的な?
railsで言うとviewとかcontrollerあたりがそれにあたるのかな。と思っています。
リソースとは
それぞれのデータを作ったり・呼び出したり・更新したり・削除したりできるようにした一塊の仕組み
Usersリソースなら「user」の情報を色々する為の、UsersモデルとWebインターフェイスを合わせたもの。
この辺は多分「こういうもの」っていう意識を持っていればいいのかな。と思います。
#name:string email:stringを持つUsersリソースをscaffoldジェネレータで生成 $ rails generate scaffold User name:string email:string #生成されたファイルに則りデータベースを設定するコマンド $ 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の挙動
ざっくりでも雰囲気でもいいのでこの仕組みを頭に入れておくと
「何のために何をしているのか」がイメージしやすくなる気がします。
ルーティングを変更してみる
Rails.application.routes.draw do #この部分の解説は4.3.3との事 #ざっくり言うとscaffoldで自動生成されたUsersリソースのルーティングを纏めているもの resources :users #ルートURLにアクセスしたら UsersControllerのindexアクションを実行 root 'users#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にアクセスしたときの振る舞いについて図を書いてみてください。
- ブラウザから「/users/1/edit」のリクエスト
- routes.rbによってUsersコントローラのeditアクションが割り当てられる
- editアクションが実行され、idが1のユーザーデータを取り出すように問い合わせる
- Userモデルはidが1のユーザーをデータベースから取り出す
- 取り出したユーザーのデータをUsersコントローラに返す
- usersコントローラは受け取ったユーザーのデータを@userに保存しedit.html.erbに渡す
- editビューが起動し、ERBを実行してHTMLを生成
- Users Controllerはビューで生成されたHTMLをブラウザに返す
※本文の図解に当てはめてみていただければー
図示した振る舞いを見ながら、Scaffoldで生成されたコードの中でデータベースからユーザー情報を取得しているコードを探してみてください。
・ ・ ・ #らくだ🐫の環境では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などでご連絡いただければ幸いです