Railsを学習している時、モデルの理解があまりよく分かっていなかった。具体的には、MVCのMの部分である、やコントローラのアクションが出たら、次はモデルに処理がされるのか、くらいの認識でした。
そのため、今回モデルについて、復習した内容をアウトプットしてみた。
#1.モデルとは何か?
モデルとは、データベースとの間で情報のやり取りを行うクラスのことをいう。
データベースとは、様々な情報を集めて保存したテーブルが、まとめて格納されている場所をいう。
データベースのイメージとしては、以下のような画像を参照ください。
https://gyazo.com/753e011a9cbf5e677f04ba8d9030efb2
クラスとは、オブジェクトを作成する元となる設計図である。
クラスについては、以下のサイトを参照ください。
https://techacademy.jp/magazine/9720
テーブルとは、表形式(エクセルの表)で情報を格納しているものをいう。そして、表の読み方として、テーブルの横1行のことをレコード、縦1列のことをカラムという。
#2.モデルの役割
モデルは、テータベースの設計図であり、コントローラのとデータベース上のテーブルとのつなぎ役でもある。
https://gyazo.com/bcfa7466a81f1715829b6c81a658e979
つまり、コントローラとモデルとの間では、モデルという大枠を定義して、テーブルという細かい情報を格納している場所とアクセスできる関係性が設定されている。
テーブルとモデルの関係性は、テーブルとモデルクラスの名前によって決定する。これは、モデルの命名規則と関係している。モデルの命名規則については、以下の画像を必ず参照ください。
https://gyazo.com/e2fbec8c18b3d4ba90144f229fa35a17
具体例
app/models/tweet.rb (モデルクラス)
class Tweet < ApplicationRecord
end
app/controllers/tweets_controller.rb (コントローラ)
class TweetsController < ApplicationController
def index
@tweet = Tweet.find(1)
end
end
モデルのTweetクラスとコントローラのインスタンス変数である@ tweet = Tweet.find(1)のTweetは、同じ意味である。ここでの@ tweet(変数)の中に入っている値は、 Tweetクラスから呼び出されたデータベース上のtweetsテーブルのレコード1の値を意味している。つまり、上記における@ tweetは、Tweetクラスのインスタンスということを意味している。
※モデルの命名規則について、個人的には@ tweet = Tweet.find(1)のTweetは、なぜ大文字表記なのかさっぱり理解できなかった。モデルクラス名は先頭は大文字・単数形で、テーブル名は先頭は小文字・複数形であることを知らなかったからであった。
#3.モデルの作成方法
モデルを作成する際は、以下のコマンドを実行する。
$ rails g model モデルクラス名
コマンドを打つ時、モデルクラスの文字表記は、全て小文字で記述する。
正しく実行がされれば、以下のようにモデルファイルとマイグレーションファイルが生成される。
create db/migrate/20141011073059_create_tweets.rb
create app/models/tweet.rb
以上
<参考記事>
・https://www.buildinsider.net/web/rubyonrails4/0204
・https://udemy.benesse.co.jp/development/web/rails-model.html
・https://udemy.benesse.co.jp/development/web/rails-model.html