3
2

More than 3 years have passed since last update.

[Rails] ActiveRecord

Last updated at Posted at 2020-12-28

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 と書く必要があるそうです。

application_record.rb
class ApplicationRecord < ActiveRecord::Base
  self.abstract_class = true
end
user.rb
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

3
2
0

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
3
2