前提
Railsチュートリアル2章の学習を行ったので
簡単に学んだことをまとめます!
目次
章の目的
UsersモデルとMicropostモデル
Usersリソースの追加
クラスの継承
感想
章の目的
toy_appアプリケーションを作成する。
ユーザーと短いマイクロポスト(Twitterにおけるツイート)を扱う練習となる
UsersモデルとMicropostモデル
○Usersモデル
Usersはデータベースのテーブル(table)に相当し、
id、name、 email の属性はそれぞれテーブルのカラム(column: 列)に相当します。
Users
名前 | 型 |
---|---|
Id | integer |
name | string |
string |
○Micropostモデル
user_idという属性を使って、1人のユーザーに複数のマイクロポストが関連付けられています。
名前 | 型 |
---|---|
id | integer |
content | string |
user_id | integer |
MicropostとUsersはidとuser_idで関連付けられており、
そのためユーザーは複数のMicropostを持っています
Usersリソースの追加
rails generate scaffold User name:string email:string
Userリソースを追加することでユーザー管理用のページが多数Railsに追加されます。
このコマンドだけでページまで作られるのはすごい便利だと感じました!
Userページの動き
①ブラウザから「/users」というURLのリクエストをRailsサーバーに送信する。
↓
②「/users」リクエストは、Railsのルーティング機構(ルーター)によってUsersコントローラ内のindexアクションに割り当てられる。
○該当箇所
config/routes.rbファイルのルートで
Usersコントローラ内のindexアクションに割り当てている。
Rails.application.routes.draw do
resources :users
root 'users#index'
end
↓
③indexアクションが実行され、そこからUserモデルに、「すべてのユーザーを取り出せ」(User.all)と問い合わせる。
④Userモデルは問い合わせを受け、すべてのユーザーをデータベースから取り出す。
⑤データベースから取り出したユーザーの一覧をUserモデルからコントローラに返す。
⑥Usersコントローラは、ユーザーの一覧を@users変数(@はRubyのインスタンス変数を表す)に保存し、indexビューに渡す。
○該当箇所
app/controllers/users_controller.rbファイルのindexアクションの
User.allで問い合わせている(③)
User.allの結果(④)を@usersに保存する(⑤、⑥)
class UsersController < ApplicationController
.
.
def index
@users = User.all
end
.
.
end
↓
⑦indexビューが起動し、ERB(Embedded RuBy: ビューのHTMLに埋め込まれているRubyコード)を実行して HTMLを生成(レンダリング)する。
app/views/users/index.html.erbファイルの
<% @users.each do |user| %>でユーザーの数分表示する
<p style="color: green"><%= notice %></p>
<h1>Users</h1>
<div id="users">
<% @users.each do |user| %>
<%= render user %>
<p>
<%= link_to "Show this user", user %>
</p>
<% end %>
</div>
<%= link_to "New user", new_user_path %>
↓
⑧コントローラは、ビューで生成されたHTMLを受け取り、ブラウザに返す。
クラスの継承
UserモデルとMicropostモデルはいずれも、ApplicationRecordというクラスを継承しています。
ApplicationRecordクラスは、
Active Recordが提供する基本クラス ActiveRecord::Base を継承しているので、
ApplicationRecordを継承して作成したモデルオブジェクトはデータベースにアクセスできるようになり、データベースのカラムをあたかもRubyの属性のように扱えるようになります。
感想
第二章の学習ではデータ取得から画面表示までの流れを学ぶことができました。
usersとmicropostそれぞれの結びつきを理解するのに最初は苦労しましたが
まとめているうちに動きが理解できました。
この調子で3章も進めていきたいです