Ruby on Railsではデータベースを操作する時に、ActiveRecordのクエリインターフェイスという機能を使用することができる。
このクエリインターフェイスは簡単な記述でデータベース操作言語であるSQLを発行してくれるRails独自の記法のことです。
SQLとActiveRecordのクエリインターフェースそれぞれでデータを取得する。
下記のようなテーブルが存在して、特定のid列のデータのみを取得したい場合。
※画像では「description」という項目になっていますが、講座内では「memo_text」という項目になっています。
SQLの場合
.sql
SELECT
*
FROM
memos
WHERE
id = 1
LIMIT 1; /*id: 1, title: "買い物", memo_text: "牛乳"のレコードが一件取得できる。*/
クエリインターフェースを使用した場合。
.rb
Memo.find(1)
# find(id)メソッドは指定したidでテーブルデータを取得できる。
## id以外の項目(titleなど)で検索 SQLの場合
.sql
SELECT
*
FROM
memos
WHERE
title = "買い物"
LIMIT 1;
クエリインターフェースを使用した場合。
.rb
Memo.find_by(title: "買い物")
# find_by(項目名: 検索値)メソッドは指定したidでテーブルデータを取得できる。
## 条件に一致するデータを複数取得したい場合。 SQLの場合
.sql
SELECT
*
FROM
memos
WHERE
id = 1;
クエリインターフェースを使用した場合。
.rb
Memo.where(id: 1)
# where(項目名: 検索値)メソッドは指定したidでテーブルデータを取得できる。
テーブルにデータを登録する。
SQLの場合
.sql
INSERT INTO
memos
(
id,
title,
memo_text
)
VALUES
(
1,
"買い物",
"じゃがいも、豚肉、カレールウ"
)
クエリインターフェースを使用した場合。
.rb
Memo.create(id: 1, title: "買い物", memo_text: "じゃがいも、豚肉、カレールウ")
テーブルのデータを更新する。
SQLの場合
.sql
UPDATE
memos
SET
title = "買い物内容変更" /*変更する項目 = 値 */
WHERE
id = 1; /*対象の条件*/
クエリインターフェースを使用した場合。
.rb
Memo.where(id: 1).update(title: "買い物内容変更")
# idで検索を行なってから更新をしていることに注意。
テーブルのデータを削除する
.sql
DELETE
FROM
memos
WHERE
id = 1; /*対象の条件*/
クエリインターフェースを使用した場合。
.rb
Memo.where(id: 1).delete_all
# idで検索を行なってから削除をしていることに注意。
# クエリインターフェースで削除する場合は1対多の関連するレコードを削除するdestroy_allなどもある。