LoginSignup
0
0

More than 3 years have passed since last update.

ActiveRecordまとめメモ

Last updated at Posted at 2021-02-28

はじめに

 最近Railsの独学をはじめたので備忘録として記事にしていきます。普段は業務でphpを使っていて、データのやりとりにはSQL文を書いてるんですが、SQLを書かずに簡単にデータ操作ができる「ActiveRecord」について学習したので記事を書いていきたいと思います。アドバイスなどがあればコメントお願いします。

ActiveRecordとは?

結論から言うとActiveRecordとは、「DB操作を行うSQLを使わず、Rubyでデータ操作を可能にする仕組み」です。例えば、Userテーブルからidが1の顧客を取得する場合、SQLでは

「SELECT * FROM users WHERE id = 1」

と長いコードを書かなければいけないんですが、ActiveRecordであれば

「User.find(1)」

と書けばID=1のユーザー情報を簡単に取得することができます。

ActiveRecordを使用するメリット

■短いコードで直感的に書くことができる

 上記の例のように、ActiveRecordのメソッドを使えば簡単にDB操作を行うことができ、僕みたいな駆け出しエンジニアや初学者の方の心理的なハードルは下がると思います。まずはActiveRecordを使えばこういうことができるというのを経験的に学んで、そこから深く掘り下げてSQLなどを学んでいくと理解が深まると思うのでおすすめです。

よく使うメソッド

作成系(Create)

■newメソッド

インスタンスの生成を行う。newメソッドは新しいオブジェクトを作成するだけで、データベースへの保存はできない。

# インスタンスの生成
user = User.new
user.name = "yamada"
user.email = "example@mail.co.jp"

■saveメソッド

上記のnewメソッドでインスタンスを作成し、代入した値をデータベースに保存するのがsaveメソッド。
保存に成功すればtrue、失敗すればfalseを返す。

# 作成したオブジェクトの保存
user.save

■createメソッド

 インスタンスの生成とデータベースの保存を行うメソッド。newメソッドとsaveメソッドが行なっている処理を一括で行う。Userモデルにnameとemail属性があればデータベースに新しいレコードを作成する。

# インスタンスの生成 + オブジェクトの保存
user = User.create(name: "yamada", email: "example@mail.co.jp")

取得系(Read)

■allメソッド

指定したモデルの全てのオブジェクトを取得する。

# ユーザーモデルの全てのレコードを取得
users = User.all

■findメソッド

指定したidから一件のレコードを取得する。

# ユーザーモデルからidが1のレコードを取得
user = User.find(1)

■find_byメソッド

指定した属性、値の最初のレコードを一件取得する。

# ユーザーモデルからname属性が山田のレコードの最初の一件を取得
user = User.find_by(name: "yamada")

■firstメソッド

指定したモデルの最初のレコードを一件取得する。

# ユーザーモデルの最初のレコードを取得
user = User.first

■whereメソッド

指定した属性、値に一致するレコードを全て取得する。先ほどのfind_byメソッドは一致するレコードを一件取得するが、whereメソッドは全て取得する。

# ユーザーモデルのname属性で値が山田のレコードを全て取得
users = User.where(name: "yamada")

更新系(Update)

■updateメソッド

指定したレコードの値を変更する。

# idが1のレコードのname属性を田中に変更する
user = User.find(1)
user.update(name: "tanaka")

下記のコードと上記のコードは同じ意味。

user = User.find(1)
user.name = 'tanaka'
user.save

■update_all

指定した属性のレコードを全て更新する。一回のSQLで全て更新できるので一括で値を更新する場合に便利。

# ユーザーモデルの性別属性を全て男に更新
user.update_all(sex: "male")

削除系(Delete)

■destroyメソッド

指定したレコードを削除する。

# idが1のレコードを削除
user = User.find(1)
user.destroy

■destroy_byメソッド

指定した属性、値と一致するレコードを全て削除する。

# name属性の値が山田のレコードを全て削除
User.destroy_by(name: "yamada")

■destroy_all

指定したモデルの全てのレコードを削除する。

# ユーザーモデルのレコードを全て削除
User.destroy_all

参考記事

Raileガイド Active Record の基礎

0
0
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
0
0