ActiveRecord
ActiveRecordとは
Railsが採用している ORM (Object RDB Mapper) です。
ModelとDBの間でRuby → SQL に翻訳をしてくれています。
基本的にDBにはDB言語としてSQLが使われており、
SQLでないとDBの操作ができませんが、
RailsにはModelにActiveRecordが適用されているおかげで、Rubyを用いてDBからデータを探したり、持ってきたりすることができます。
(厳密にはModelにApplicationRecordを介してActiveRecordが適用されているため)
Modelを見ると下記のようになっていると思います。これは
ApplicationRecordにActiveRecordを継承し、
user.rbなど、その他のModelにApplicationRecordを継承しているということです。
ちなみにself.abstract_class = trueの詳しい意味は分かりませんが、
必要性・意義については下記の通りです。
ActiveRecord::Base を継承したクラスをモデルとして作成すると、Rails はそのクラス名に対応したデータベースのテーブルを自動的に探そうとします。対応するデータベースのテーブルを用意しない場合は、self.abstract_class = true を書く必要があります。なので
ActiveRecord::Base を継承したクラスを作成し、さらにそのクラスを継承させたい場合にはself.abstract_class = true と書く必要があるそうです。
class ApplicationRecord < ActiveRecord::Base
self.abstract_class = true
end
class User < ApplicationRecord
end
メリット
モデルおよびモデル内のデータを表現する
モデル同士の関連付け(アソシエーション)を表現する
関連付けられているモデル間の継承階層を表現する
データをデータベースで永続化する前にバリデーション(検証)を行なう
データベースをオブジェクト指向スタイルで操作する
Rubyで直感的に書ける
どのDBを使用していてもRubyで同じように書ける
CRUD
CRUDとは、4つのデータベース操作を表す「Create」「Read」「Update」「Delete」の頭字語です。Active Recordはこれらのメソッドを自動的に作成するので、テーブルに保存されているデータをアプリケーションで操作できるようになります。
Create(生成) Read(表示) Update(更新) Delete(削除)
ActiveRecordメソッド
モデルがテーブル操作に関して使用できるメソッドです。
テーブルに情報を保存したり取得するために使用します。
CRUD順に主要なメソッドを紹介していきます。
○Createメソッド
メソッド | 用途 |
---|---|
new | クラスのインスタンス(レコード)を生成する |
build | クラスのインスタンス(レコード)を生成する |
save | クラスのインスタンス(レコード)を保存する |
create | クラスのインスタンス(レコード)を生成する と同時にDBへ保存する。 |
○Readメソッド
メソッド | 用途 |
---|---|
all | テーブルから全レコードを配列として取得 |
first | テーブルのidが一番小さいレコードを取得 |
last | テーブルのidが一番大きいレコードを取得 |
find | 引数に入っている数字と同じidのレコードを取得 |
find_by | 引数に入っている条件と合っているもので一番若いidのレコードを取得 |
where | 引数に入っている条件と合っている全てのレコードを取得 |
order | 引数に入っているカラムを:asc(昇順)または:desc(降順)に並び替えてレコードを取得 |
select | 引数に入っている名前のカラムのみを取得 |
limit | 引数に入っている数字の数だけidの若い順にレコードを取得 |
○Updateメソッド
メソッド | 用途 |
---|---|
update | findやfind_byで取得したレコードを元に更新 |
update_by | 複数のレコードを一度に更新 |
update_all | 全てのレコードを一度に更新 |
○Deleteメソッド
メソッド | 用途 |
---|---|
destroy | findやfind_byで取得したレコードを削除 |
destroy_by | 複数レコードを一括削除 |
destroy_all | 全てのレコードを一括削除 |
この記事は下記2つの記事を参考させていただきました。
https://railsguides.jp/active_record_basics.html#active-record%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6