ActiveRecordの使い方
3740 ワード
はじめに
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
Author And Source
この問題について(ActiveRecordの使い方), 我々は、より多くの情報をここで見つけました https://qiita.com/a_ishidaaa/items/f29e07e75fe768b5a7d0著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .