harukin721

主に学習記録 🔗 wantedly.com/id/harukin721

【再学習】Ruby on Rails の Active Record

Ruby on Rails の Active Record を再学習した。チーム内の LTで話した。 

railsguides.jp

Active Record

MVC の モデルに相当し、ビジネスデータとビジネスロジックを表す。データベースに恒久的に保存される必要のあるビジネスオブジェクトの作成と利用を円滑に行なえるようにする。モデルとデータベースのテーブルは 1 対 1 の関係にある。データの操作を簡素化してくれている。

モデルクラスを作成して、それにデータベースのテーブルのカラムを属性として追加して、モデルのインスタンスがを通じてデータベースのレコードにアクセスするイメージ。

-> Book モデルが books テーブルにマッピングする。

ORM (オブジェクト/リレーショナルマッピング) なので SQL を直接書かなくてもよい。SQL を抽象化してくれているので MySQL であることを特に意識する必要がない。PostgreSQL であってもとくに SQL の変更は必要ない。

( 勉強には sqlite を使うとよい。)

ORM (オブジェクト/リレーショナルマッピング

  • モデルおよびモデル内のデータを表現
  • 関連付けられているモデル間の継承階層を表現
  • モデル同士のアソシエーション
    • テーブル間の関係を表現し、それに基づいてデータを取得・保存
  • データをデータベースで永続化する前のバリデーション
    • 特定の条件を満たすかの確認
  • データベースをオブジェクト指向スタイルで操作 ...etc

MySQL 5.7 から 8.0 へのアップデート

dev.mysql.com

  • 認証プラグインのデフォルトが mysql_native_password から caching_sha2_password が使用されるようになっている
  • 予約語が変更されていないかの確認
    • なにか変更があるとどこかで見た記憶
  • ストアドプロシージャ(データベース内に保存され、再利用可能な一連のSQL ステートメントを含むプログラム)、関数の作成や呼び出しなどに関するものが変更されていないかの確認 ...etc

なにを意識してコードを理解すればよいか

  • モデルのクラス構造と継承関係:

    • モデルは通常 ApplicationRecord クラスを継承

    • モデルクラス内で定義された属性やメソッドを確認

  • マイグレーションファイル:

    • データベースのテーブル構造はマイグレーションで管理

    • モデルの属性とデータベースのカラムの対応関係を確認

  • クエリメソッドの使用:

    • モデル内でのデータベースクエリの使用方法の確認

    • where、order、findなどのメソッドを使用してデータを取得手法

  • 関連付け:

    • モデル間の関連付けの確認

    • belongs_to や has_many などのメソッド

    • データの関係性を把握することもやっておきたい

  • スコープとコールバック:

    • モデルに定義されたスコープやコールバックを確認

    • データベース操作においてどの条件や処理が適用されているか

などを、おおよそ理解しながら進める。