LoginSignup
0
0

More than 3 years have passed since last update.

【Sinatra】でActiveRecord

Posted at

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すげー!

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0