🥝

Rails モデルとDB

2023/04/04に公開

モデルとは

「モデル(Model)」は、アプリケーション固有のデータや処理を扱う部分です。データベースにアクセスして、データの登録や取得、更新、削除などの処理を行います。

データベースとは

「データベース(DB, database)」は、データを格納する保存先です。
データベースを利用することで、データを効率的に保存したり、高速で検索できるようになります。
Railsでは、これらのデータを「テーブル」にまとめ、複数のテーブルを関連付けて保存している!

データベースに関するファイルは、app→dbディレクトリ内に保存されており、
テーブル内のデータは、Excelの表形式のような構造で整理されているのが特徴!

テーブルの構造

レコードとカラム

  • カラム
    テーブルの縦1列のこと

  • レコード
    テーブルの横1行のこと

Railsで扱うテーブルの特徴

Railsでテーブルを作成すると、「id」のカラムが自動的に生成される!
idのカラムには、id番号が順番に割り振られ、同じidは存在しないので、このidによってレコードの中身を特定できる!🙆🏻‍♀️

通常では、データベースとやりとりをするには、データベース言語(SQL:エスキューエル)でアクセスする必要があるが、
モデルを使うことでデータベースとのやりとりが簡略化され、SQLを記述しなくてもデータベース内にテーブルを作成したり、データを取得したりすることができるようになっている!!

モデルがSQL文をデータベースに渡すことで
データを書き込んだり、保存されたデータを読み込んだりしている、ということは知っておく。

• モデル → SQL → データベース

モデルを作成して、どのようにデータベースとやり取りするのか

💡 rails g modelコマンドを実行すると、4つのファイルが生成される

このうち、特に重要なファイルは上側の2つ。

  • db/migrate/(作成日時)_create_lists.rb

「migrationファイル」というデータベースの設計図になるファイルです。

  • app/models/list.rb

モデルクラスはデータベースに対応したRubyのクラスです。

  • test/models/list_test.rb

モデルクラスのテストコードのひな形です。

  • test/fixtures/lists.yml

テストデータ作成のためのひな形です。

migrationファイルとは

テーブルの作成や変更を管理するファイルのこと!
このファイルに記述される内容によって、テーブル名やカラム名、テーブルの列などが決定する。

ファイルの名前は
「(作成日時)create(テーブル名).rb」となる。
テーブル名には、「モデル名の複数形」が自動的に割り振られる。

「List」と単数形で書いた場合、テーブル名は「lists」と複数形の英小文字になる_φ(・_・

モデルとテーブルの繋がりは「モデル名」で決まる

情報は、テーブルに保存される。テーブルに保存された情報を引き出すのは、そのテーブルに対応するモデル。
どのテーブルとモデルが関連付けられているかは、名前によって判断される!!

Railsでは、命名の規則が厳密に決められている👀

種類 概要 名前例
モデル名 単数形、先頭は英大文字 List
モデルのファイル名 単数形、先頭は英小文字 list.rb
テーブル名 複数形、先頭は英小文字 lists

migrationファイルを用意して、テーブルの作成

migrationファイルはモデルを作成した際に自動生成されているので、あとは編集するだけ!
create_tableメソッドを「do」から「end」内に記述することで、カラムを定義できる!

def change
  create_table :テーブル名 do |t|
    t.データ型 :カラム名
  end
end

「t.データ型名 :カラム名」の記述は覚えておく!

例として、ブログ投稿を仮定しているので、以下2つのカラムを定義!

  • title(タイトル)
  • body(本文)
    カラムのデータ型は、string型にする。
class CreateLists < ActiveRecord::Migration[5.2]
  def change
    create_table :lists do |t|
      # 以下の2行を追加
      t.string :title
      t.string :body      t.timestamps
    end
  end
end

migrationファイルをデータベースへ反映し、テーブルを作成

ここまでの記述で、カラムの定義が完成。
ただし、まだテーブルは作成されていません。

migrationファイルからデータベース上にテーブルを作成しなくてはならない!
migrationファイルからテーブルを作成するコマンド

rails db:migrate

正しく記述できるとデータベースに「lists」という名のテーブルが作成される!

schemaファイルを確認する

マイグレーションファイルを反映しテーブルを作成すると、db/schema.rbというファイルが作成されます。
schemaとはデータ構造のことを意味し、データベースの定義を確認することができる!

db/schema.rbを開くと以下のようになっているはず!

ActiveRecord::Schema.define(version: migrate日時) do

  create_table "lists", force: :cascade do |t|
    t.string "title"
    t.string "body"
    t.datetime "created_at", precision: 6, null: false
    t.datetime "updated_at", precision: 6, null: false
  end

end

マイグレーションファイルに記述したtitleカラムとbodyカラムがあるため、マイグレーションファイル通りのデータ構造になっていることが確認できる。

どのようなカラムが作られていて、どのようなカラムが存在しないのかが一目でわかるため、schemaファイルを見る癖をつけておく!!

まとめ

  • モデルとテーブルは連動している。
  • migrationファイルを使うと、テーブルの作成やカラムの追加・削除ができる。
  • モデルの作成は「rails g model モデル名」で行う
  • migrationファイルの作成時は、必ず「rails db:migrate」で実行する。

今日はめちゃくちゃ重要なのにわかっていなかったところを読み返して整理、
何言ってんのかわかんない状態からちゃんと仕組みが理解できるようになってきて感動。
課題2は明日やっと完成できそうで一安心。

毎日追加の資料などたくさん送られてきて、
それでなくてもやること多い&今やってること理解できてなくてパニックなってたけど、

友達がしっかりメモをとりながら勉強しているのを見て
私も今日からちゃんと始めてみてるけど、やっぱりただ見て進めるのとは理解が全然違ってるし、
パニックが落ち着いてやるべきことが整理できた💦

勉強方法や初期に悩んでいたことなど後々見返したりもできるし
すぐ流しちゃったり、忘れたりする私にはとっても重要なことだった、、!
今気づけてよかった、、!

明日は初デイリースクラムがあるからワクワク

Discussion