2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SQLとActiveRecord

Last updated at Posted at 2020-02-09

Ruby on Railsではデータベースを操作する時に、ActiveRecordのクエリインターフェイスという機能を使用することができる。
このクエリインターフェイスは簡単な記述でデータベース操作言語であるSQLを発行してくれるRails独自の記法のことです。

SQLとActiveRecordのクエリインターフェースそれぞれでデータを取得する。

下記のようなテーブルが存在して、特定のid列のデータのみを取得したい場合。
※画像では「description」という項目になっていますが、講座内では「memo_text」という項目になっています。

スクリーンショット 2020-02-09 10.25.05.png

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などもある。
2
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?