0Pricing
Ruby Academy · レッスン

Active Record の基礎

ORM の基礎です。

「Active Record の基礎」はCoddyKit上の無料Ruby Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはRuby Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Ruby Academyコースには全4レッスンが含まれています。

Active Recordとは

Active Recordは、RailsのORM(オブジェクト関係マッパー)層です。Rubyオブジェクトをデータベーステーブルの行に接続するため、生のSQLではなくオブジェクトを扱えます。

  • クラスはテーブルに対応します。
  • インスタンスは行に対応します。
  • 属性はカラムに対応します。

モデルを定義する

モデルはApplicationRecord(ActiveRecord::Baseを継承しています)を継承するクラスです。規約により、Userモデルは自動的にusersテーブルに対応付けられます。

class User < ApplicationRecord
end

# Maps to the 'users' table
# Columns become attributes automatically

設定より規約

Active Recordは命名規則を使用するため、設定を少なくできます。

  • クラス名は単数形のCamelCaseです:User。
  • テーブル名は複数形のsnake_caseです:users。
  • 主キーのデフォルトはidです。

規約に従えば、ほとんどの関連付けは自動的に設定されます。

レコードを作成する

createで行を作成するか、構築してからsaveします。createはインスタンス化と保存を1回の呼び出しで行います。

user = User.create(name: "Ada", email: "ada@example.com")

# Or in two steps:
other = User.new(name: "Linus")
other.email = "linus@example.com"
other.save

レコードを読み込む

検索メソッドでレコードを取得します。

  • 主キーで検索するUser.find(1)(見つからない場合は例外が発生します)。
  • 任意のカラムで検索するUser.find_by(email: 'a@b.com')(見つからない場合はnilを返します)。
  • すべての行を取得するUser.all。
  • User.firstとUser.last。
user = User.find(1)
admin = User.find_by(role: "admin")
everyone = User.all

レコードを更新する

属性を変更してからsaveするか、updateを使って代入と保存をまとめて行います。updateは、バリデーションの結果に応じてtrueまたはfalseを返します。

user = User.find(1)
user.update(name: "Ada Lovelace")

# Equivalent two-step form:
user.name = "Ada Lovelace"
user.save

レコードを削除する

destroy(コールバックと関連付けを実行します)またはdelete(直接SQLを実行し、コールバックをスキップします)で行を削除します。コールバックを回避する理由がない限り、destroyを使用してください。

user = User.find(1)
user.destroy

# Bulk destroy:
User.where(active: false).destroy_all

属性と変更追跡

Active Recordは保存前の変更を追跡します。changed?、changes、name_wasなどのメソッドで、保存前にどの属性が変更されているかを確認できます。これはコールバックやログ記録で役立ちます。

user = User.find(1)
user.name = "New Name"
puts user.changed?      # true
puts user.name_was      # old value
puts user.changes.inspect

schema.rbファイル

Active Recordは、モデルではなくデータベースからテーブル構造を読み取ります。現在の構造は、マイグレーションから生成されるdb/schema.rbに反映されます。手動で編集することはほとんどありません。

SQLはどこで実行されるのか

Active Recordは、メソッド呼び出しを内部でSQLに変換します。User.find(1)はSELECT * FROM users WHERE id = 1 LIMIT 1になります。生成されたSQLはUser.where(active: true).to_sqlで確認できます。

sql = User.where(active: true).to_sql
# => SELECT "users".* FROM "users" WHERE "users"."active" = TRUE

ORMが役立つ理由

Active Recordには次の利点があります。

  • データベースに依存しないコード(PostgreSQL、MySQL、SQLite)。
  • パラメーター化クエリによるSQLインジェクション対策。
  • 読みやすいオブジェクト指向のデータアクセス。

生のSQLを使うのは、特殊なケースだけです。

理解度チェック

Active Recordの基本についての理解度を確認します。

まとめ:Active Recordの基本

ORMの基本を学びました。

  • クラスはテーブルに、インスタンスは行に対応します。
  • 設定より規約によって命名が処理されます。
  • CRUD:create、find/find_by、update、destroy。
  • 変更追跡によって保存前の変更を確認できます。
  • Active Recordが安全なSQLを生成します。

次は、マイグレーションでデータベーススキーマを管理します。

よくある質問

「Active Record の基礎」レッスンは無料ですか?

はい。「Active Record の基礎」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Ruby Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Ruby Academyコースには全4レッスンが含まれています。

「Active Record の基礎」で何を学びますか?

ORM の基礎です。 ブラウザで直接実行するハンズオンコードでRuby Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Ruby Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのRuby Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「Active Record の基礎」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このRuby Academyレッスンでコードを書いて実行できますか?

はい。すべてのRuby Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Active Record の基礎
  2. マイグレーション
  3. 関連付け
  4. バリデーションとクエリ
← Ruby Academyに戻る