1
2

More than 5 years have passed since last update.

ActiveRecordの使い方

Last updated at Posted at 2016-05-07

はじめに

Railsで開発をするとき、RDBへのデータ操作はActiveRecordを介して実施する。DBデータの変更がオブジェクトの変更に抽象化されるため、SQLを知らなくてもデータベースへのデータの書き込み、取り出し、上書き、削除といった操作ができることができるのだけど、SQLをある程度知っている人には辛かったりする。(このSQLを書くためには、 ActiveRecordでどう書けばいいんだ?的な)なので、ここの記事にまとめておく。

前提

扱うモデルは下のようなテーブルとする。

usersテーブル

mysql> desc users;
+-----------------+--------------+------+-----+---------+----------------+
| Field           | Type         | Null | Key | Default | Extra          |
+-----------------+--------------+------+-----+---------+----------------+
| id              | int(11)      | NO   | PRI | NULL    | auto_increment |
| organization_id | int(11)      | YES  |     | NULL    |                |
| name            | varchar(255) | NO   |     | NULL    |                |
| address         | varchar(255) | NO   |     | NULL    |                |
| created_at      | datetime     | NO   |     | NULL    |                |
| updated_at      | datetime     | NO   |     | NULL    |                |
| retired         | tinyint(1)   | NO   |     | 0       |                |
+-----------------+--------------+------+-----+---------+----------------+
6 rows in set (0.01 sec)

確認方法

User::ActiveRecord_Relationクラスのインスタンスメソッド(to_sql)
で確認できる。
例)

pry>User.all.to_sql
=> "SELECT `users`.* FROM `users`"

CRUD系操作

SELECT

1テーブルの検索

目的 SQL ActiveRecord
全件取得
(すべてのカラム)
select * from users; User.all
全件取得
(カラム指定)
select id, name from users; User.all.select('id,name')
User.all.select([:id,:name])
ソート
(昇順)
select * from users order by name; User.all.order(:name)
ソート
(降順)
select * from users order by name desc; User.all.order("name desc")
条件指定
(=)
select * from users where id = 2; User.all.where(id: 2)
条件指定
(<, >)
select * from users where id > 5; User.all.where('id > 5')
条件指定
(IN句)
select * from users where id in (2,3,4); User.all.where(id: [2,3,4])
条件指定
(like句)
select * from users where address like a%'; User.all.where("address like 'a%'")
件数カウント(count) select count(*) from users User.all.count
重複排除(distinct) select distinct name from users User.all.uniq(:name)

複数テーブルのJOIN,検索

WIP

INSERT

WIP

UPDATE

WIP

DELETE

WIP

ヒント句

サニタイズ

WIP

bind変数

WIP

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