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.inspectschema.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" = TRUEORMが役立つ理由
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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Active Record の基礎
- マイグレーション
- 関連付け
- バリデーションとクエリ