BETA

【Sinatra】ActiveRecord

投稿日:2019-08-07
最終更新:2019-08-08

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(bookid...)で使用します。

主キーは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を返します。

コールバック

https://railsguides.jp/active_record_callbacks.html

特定のイベントが発生した場合に処理を呼び出すことが出来ます。詳しくは実装したことが無いので割愛させていただきますm(__)m

まとめ

Active Recordすげー!

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

初学者の成長が垣間見れます

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
or 外部アカウントではじめる
10秒で技術ブログが作れます!