30DAYSトライアル4th

30DAYSトライアル4th(Rails)のまとめ【DAY30(仮)】

30DAYSトライアル4th(Rails)DAY30(仮)の課題は「ドットインストール Active Record入門コース」です。

※(仮)としているのは東京フリーランスの記事ではDAY20までしか書かれていないので、その先を勝手に自分で決めて進めているからです。

30DAYSトライアル4th(Rails)DAY30(仮)の学習内容

Progate、ドットインストールのRailsコースにて少なからずActive Recordには触れているので、一気に全部いっちゃいます。

30DAYSトライアル4th(Rails)DAY30(仮)の学習内容
  • #01 Active Recordを使ってみよう
  • #02 データベースの準備をしていこう
  • #03 Active Recordの設定をしていこう
  • #04 レコードを挿入してみよう
  • #05 Loggerを使ってSQLを確認しよう
  • #06 レコードを抽出してみよう
  • #07 抽出条件を指定してみよう
  • #08 whereを使って抽出してみよう
  • #09 プレースホルダーを使ってみよう
  • #10 order 、limit、offsetを使ってみよう
  • #11 抽出条件を登録してみよう
  • #12 finde_or_create_byを使おう
  • #13 データを更新してみよう
  • #14 データを削除してみよう
  • #15 validationを使ってみよう
  • #16 Callbackを設定してみよう
  • #17 Associationを設定してみよう
  • #18 関連するデータを抽出しよう
  • #19 関連するデータを削除しよう

#01 Active Recordを使ってみよう

Active RecordはRailsの一部として開発されたOR(O;オブジェクトとR:RDB)マッパー(マッピング)で、ざっくり言うとデータベース(RDB)のデータをオブジェクトとして扱えるようにするものになります。

これのおかげでRailsからSQLを意識することなくオブジェクトの操作のみでデータベースへのデータの取得・作成・更新・削除などができるようになります。

またRailsの一部として開発されているが、Active Record単体でも使用できる。

Active Recordのインストール

ドットインストールではRailsと同様にドットインストール用の仮想環境(ローカル開発環境の構築 [macOS編])を使用しますが、僕は自分のPC(Mac)に最新のバージョンをインストールしました。

Active Record単体をインストールする場合はターミナルにて下記コマンドを実行します。

SQLiteのインストール

学習で使用するデータベースのSQLiteもインストールします。

SQLiteもgemからインストールを行いますので、下記のコマンドをターミナルにて実行します。

#02 データベースの準備をしていこう

データベースの準備として、SQLIteにデータベースを作成し、その中にテーブルを作成します。

テーブル作成コマンド

テーブルを作成する構文は以下の通りです。

上記のように作成したファイルを下記のようなコマンドをターミナルから実行することで読み込む。

  • テーブル名は小文字の複数形とする(Rails同様命名ルールが細かく決められている)
  • primary keyのカラム名はid、データ型はintegerにする
    (Active Recordが自動的に連番にしてくれる)
  • created_at、updated_atカラムを用意するとActive Recordが自動的に作成・更新日時を管理してくれる

SQLiteにデータを外部ファイルからインポートする

SQLiteへのデータを外部ファイルからインポートするには、下記のコマンドをターミナルにて実行します。

  • SQLiteのデータベースは「データベース名」というファイル

#03 Active Recordの設定をしていこう

RubyにActive Recordの設定をしていきます。

基本的な設定はRubyのファイル(ファイル名.rb)に以下のような内容を記述していく。

  • SQLiteにはユーザー、パスワードは不要
  • オブジェクト名は単数形の頭文字を大文字とする

#04 レコードを挿入してみよう

テーブルにレコードを挿入する方法になります。

オブジェクトを生成し、保存する

テーブルにレーコードを挿入する場合は、該当のオブジェクトを生成し、そのオブジェクトでデータベースに保存するというようなコードを記述します。

オブジェクトの生成、保存を同時に行う

オブジェクトの生成と保存を同時に行うこともできます。

#05 Loggerを使ってSQLを確認しよう

Loggerを使用することで、オブジェクトを保存する際などにどのようなSQLが発行されているかを確認することができます。

Loggerを使用する方法はRubyの設定を行ったファイルに以下を追記します。

#06 レコードを抽出してみよう

レコードの抽出(取得)方法は以下のように記述します。

pretty print(pp)

pretty printを読み込んで使用すると、テーブルデータの取得結果を分かりやすく表示することができます。

#07 抽出条件を指定してみよう

抽出(取得)条件を指定して取得する方法です。

find

id指定でデータを取得します。

find_by

id以外のカラムの条件を指定してデータを取得します。

#08 whereを使って抽出してみよう

whereメソッドを使用するとより複雑なデータ検索が行える

AND検索

OR検索

NOT検索

#09 プレースホルダーを使ってみよう

whereの条件に変数を埋め込みたい場合は「#{}」で埋め込む方法は悪意のあるコードが入る可能性があるため、使用してはいけない。

かわりにプレースホルダーを使用して変数を埋め込む。

LIKE検索

#10 order、limit、offsetを使ってみよう

並び替え(order)

件数制限(limit)

検索結果をとばす(offset)

#11 抽出条件を登録してみよう

何度も使用するような抽出条件であれば抽出条件を登録して使用することができる。

class、method方式

該当モデルのmethodとして抽出条件を登録する。

scope

該当モデルのscopeとして抽出条件を登録する

scopeの記述の場合は、その後にメソッドをつなげて記述できるので便利。

#12 find_or_create_byを使おう

「find_or_create_by」存在しない場合レコードを抽出条件に指定された場合、新しくレコードを作成できる。

#13 データを更新してみよう

updateとupdate_allの使い分け

updateの特徴
  • バリデーション処理ができる
  • 更新処理の前後に自動処理を追加できる
  • 低速
update_allの特徴
  • バリデーション処理ができない
  • 更新処理の前後に自動処理を追加できない
  • 高速

#14 データを削除してみよう

deleteとdestroyの使い分け

deleteの特徴
  • バリデーション処理ができる
  • 更新処理の前後に自動処理を追加できる
  • 低速
destroyの特徴
  • バリデーション処理ができない
  • 更新処理の前後に自動処理を追加できない
  • 高速

#15 Validationを使ってみよう

レコードを挿入したり更新したりする時のルール(チェック)をつけることができる。

  • validatesでNGになった場合はsaveなどを実行した結果がfalseとなる
    (データ更新時のエラーハンドリングが行える)

#16 Callbackを設定してみよう

特定の処理が行われる前後で自動的になんらかの処理を行う仕組み。

#17 Associationを設定してみよう

複数のテーブル(オブジェクト)を関連付けて扱うための仕組み。

#18 関連するデータを抽出しよう

#17で関連付けたデータは「includes」を使用することで、同時に取得できる。

#19 関連するデータを削除しよう

関連するデータを削除する場合はクラスに「dependent: :destroy」を追加する。

  • 「delete」や「destroy」を使用しても関連したデータは削除されない。
  • 「has_many」側に定義する

まとめ

環境構築(Active RecordやSQLiteのインストール方法など)まで学習できるがドットインストールの良いところですね。

だいたいはProgateとドットインストールのRailsコースで出てきた内容になりますが、一度見ておいたら知識の幅が広がると思います。

あとはActive RecordというかRubyは色んなん書き方ができるのでややこしいです。

ドットインストールの動画では全て読めるようにしましょうと言われており、そりゃそうだとは思いますが、どの書き方が主流とか、メリット、デメリットはもう少し教えてほしいところです。

DAY21以降は勝手に決めて進めましたが、一応これで30DAYSトライアル4th(Rails)は終了になります。

これからはRailsチュートリアルを進めていきたいと思います。

ABOUT ME
Jyu2
【PC1台で稼ぐブロガー兼Webエンジニアを目指し中】IT情報やWebサービス、アプリなどの情報を発信/SIerで10年以上勤務→ストレスMAXで休職中→ブログとWebの学習を行い脱サラ計画中/ #30DAYSトライアル 1st完了→2nd実施中 / 日々の学習内容をブログにアウトプット / まずは月収5万円を目指す