Avtive Recordが使用できるのはRailsだけだと思ってたのですが、Sinatraでも使用できるようです。
(他のフレームワークや言語でも使用可です)
Sinatraでは、Gemファイルにgem 'activerecord'
を追加します。
Active Recordについて
Railsの記事ですが、同じRubyを使用しているということもあり、当記事を中心にまとめていきます。
*参考
https://railsguides.jp/active_record_basics.html
https://qiita.com/tfrcm/items/80625a75959591c2b7cd#activerecord%E3%81%A8%E3%81%AF
Acitve Recordの概要
Active Recordは、プログラムとデータベースのやり取りを簡単にしたものです。アクセスコードを書くだけでSQL文うぃ書かずに、データベースに接続することができます。その機能のことを、オブジェクト/リレーショナルマッピング(O/RマッピングやORMと略されることもあります)といいます。
Active Recordの機能
・モデルおよびモデル内のデータを表現する
・モデル同士の関連付け(アソシエーション)を表現する
・関連付けられているモデル間の継承階層を表現する
・データをデータベースで永続化する前にバリデーション(検証)を行なう
・データベースをオブジェクト指向スタイルで操作する
改めて見るとめちゃくちゃ便利ですやん。
命名規則
ガチガチにあります。複数形/単数形の区別をする必要があります。(Active Recordの機能で複数形/単数形の分類はやってくれますが。)
データベースのテーブル名を探すときに、モデルのクラス名を複数形にした形で探します。
bookというモデルクラスがある場合に、これに対応するデータベースのテーブルはbooksになります。
モデル名を単数形で指定してモデルを作成しても、DB上では複数形の名前となってテーブルが作成されるということです。
スキーマのルール
スキーマとはデータベースの構造のことです。
Active Recordでは、テーブルで使用するカラム名にもルールがあります。
外部キーと主キー
外部キーはActive Recordがモデル間の付けをするときに使用されます。
このカラムはテーブル名の単数形_id(book_id...)で使用します。
主キーはRailsではマイグレーションを実施したときに、idという名前で作成されます。
その他
・created_at: レコード作成時に現在の日付時刻が自動的に設定されます
・updated_at: レコード更新時に現在の日付時刻が自動的に設定されます
・lock_version: モデルにoptimistic lockingを追加します
・type: モデルでSingle Table Inheritanceを使う場合に指定します
・関連付け名_type: ポリモーフィック関連付けの種類を保存します
・テーブル名_count: 関連付けにおいて、所属しているオブジェクトの数をキャッシュするのに使われます。たとえば、Articleクラスにcomments_countというカラムがあり、そこにCommentのインスタンスが多数あると、ポストごとのコメント数がここにキャッシュされます。
Active Recordが用意しているキーを認識していないといけませんね。
特に、外部キー、主キーの概念は押さえておいた方がいいでしょう。
データの読み書き
Active Recordでは、CRUDの機能が自動的に実装されるので、テーブルに保存されているデータをアプリケーションで操作できます。
userモデルがある場合、
User.(アクション)で、データベースの操作を行うことが出来ます。
User.create
User.all
User.delete...
バリテーション(検証)
Active Recordを使い、モデルがデータベースに書き込まれる前に、モデルの状態を検証(validation)することが出来ます。
データベースに変更を加えるので、バリテーションはとても作業です。
https://railsguides.jp/active_record_validations.html
save,updateメソッドは、バリテーションに失敗するとFalseを返し、データベースに変更を加えません。
また、より破壊的なsave!、update!メソッドは失敗すると、ActiveRecord::RecordInvalidを返します。
コールバック
特定のイベントが発生した場合に処理を呼び出すことが出来ます。詳しくは実装したことが無いので割愛させていただきますm(__)m
まとめ
Active Recordすげー!