Ruby on Railsで学ぶActiveRecord【CRUD】

どうも、tatsuです!

今回は、Ruby on RailsでのActiveRecordの使い方について解説していこうと思います。

ActiveRecordには様々な機能がありますが、この記事ではCRUD(データの読み書き)に関する解説を行っていきます。

この記事を読めば、scaffoldで作ったアプリのコントローラーで使われているCRUD(データの読み書き)については理解できるようになります。

 
Ruby on Railsをとりあえず触ってみたい方はコチラ↓↓

Windowsで始めるRuby on Rails入門【1.環境構築】

2018.10.17

ActiveRecordとは

ActiveRecordとは、Railsプロジェクトで開発されているORマッパーです。

ORマッパーとは
オブジェクトとRDB(リレーショナルデータベース)をマッピングして、データベースのデータをオブジェクトで直感的に扱うことができるツールです。

Ruby on Railsでは、モデルとテーブルがActiveRecordによってマッピングされているため、以下のような記述で簡単にデータを取得することができるのです。

@memos = Memo.all

CRUD(データの読み書き)

今回はMemoモデルを使っていると仮定して進めていきます。

Create

新規レコードを追加する場合は以下のような記述をします。

# Memoモデルのインスタンスを生成する
memo = Memo.new

# ここらへんでいろいろ値を詰めたりして

# データベースに保存する
memo.save

Read

既存レコードを取得するには以下のような記述をします。

# すべてのレコードを取得する
memos = Memo.all

# idが1のレコードを取得する
memo = Memo.find(1)

# 条件に当てはまるレコードを1件取得する
memo = Memo.find_by(title: 'タイトル')

Update

既存レコードの値を更新するには以下のような記述をします。

# find(id)メソッドを使用して、idが1のレコードを取得する
memo = Memo.find(1)

# データを更新する
memo.update(title: 'タイトル2', contents: '中身だよ')

Delete

既存レコードを削除するには以下のような記述をします。

# find_by(条件)メソッドを使用して、条件に当てはまるレコードを1件取得する
# find(id)のメソッドを使用してもOK
memo = Memo.find_by(title: 'タイトル2')

# 取得したデータを削除
memo.destroy

データの絞り込み

ここまで単純なCRUDは説明しましたが、ここからは良く使う絞り込み条件を説明します。

さきほどのCRUDに対してデータ絞り込み条件をつけることで、より複雑な処理を行うことができます。

【order】並び順を指定する

取得するデータの並び順を指定するには以下のように記述します。

# 全てのデータを更新日時の降順で取得する
# .order('カラム名 [ASC or DESC]')
memo = Memo.all.order('updated_at DESC')

【where】絞り込み条件を指定する

取得するデータの条件を指定するには以下のように記述します。

# titleが「notitle」のデータを取得する
memos = Memo.where(title: 'notitle')

# titleが「notitle」のデータを作成日時の昇順で取得する
memos = Memo.where(title: 'notitle').order('created_at ASC')

# updateやdeleteを上記のような条件で取得したデータ群に対して行う場合は特別なメソッドがある
# titleが「notitle」のデータのタイトルをすべて「new」にする
Memo.where(title: 'notitle').update_all(title: 'new')

# titleが「notitle」のデータをすべて削除する
Memo.where(title: 'notitle').delete_all
findやfind_byとの違い
ここで「findやfind_byも絞り込み条件で、whereと何が違うの?」と疑問に思った方もいるかと思います。
違いは以下になります。

メソッド 指定できる条件 返ってくるデータ
find idしか指定できない 単数
find_by 自由に指定できる 単数
where 自由に指定できる 複数

【limit】最大取得件数を指定する

取得するデータの最大取得件数を指定するには以下のように記述します。

# すべてのデータから最大5件を取得する
memos = Memo.all.limit(5)

【count】データ数を取得する

データ数を取得するには以下のように記述します。

# すべてのデータ数
memos = Memo.all.count

# titleが「notitle」のデータ数
Memo.where(title: 'notitle').count

【like】データをあいまい検索する

残念ながらRailsに標準であいまい検索をするメソッドは用意されていません。
※開発者が一度はコミットしたものの、色々な理由からそのコミットを消しているため、今後も入る可能性は低いみたいです

それでもあいまい検索はよく使う検索方法なので使いたいですよね?

以下のようにSQLを文字列で書くこととなってしまいますが、できることにはできます。

# タイトルに「new」という文字列が含まれているデータを取得
memos = Memo.where('title like ?', '%new%')

まとめ

今回はRuby on Railsを始めるにあたって最低限知っておきたいActiveRecordのご紹介をしました。

詳しくはActiveRecord公式ホームページを参考にしてみてください♪(日本語なので読みやすいですよ)

それでは!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です