メインコンテンツへスキップ
見出し画像

学習📖ActiveRecordを最短で理解するためのメソッドまとめ


    💁‍♀️ActiveRecordとは?
    データベースとプログラムを連携させるための仕組み(ORM)。
    面倒なSQL文を直接書くことなくRubyの直感的なコードでデータベースの検索やデータの保存・更新を行えるようにします。

    Rubyメソッド呼び出しを背後で適切なSQL文に変換しデータベースとのやり取りを抽象化しています。

    CRUD操作(よく行われている4種類の操作)と対応するSQL文。
    CRUD操作➡︎対応するSQL文
    Create
    (データの追加、保存)➡︎INSERT 
    Read
    (データの取得・検索)➡︎SELECT
    Update(データの更新)➡︎UPDATE
    Delete
    (データの削除)➡︎DELETE

    👇ActiveRecordメソッド一覧表

    画像

    ❶ 検索系(Read)

    データベースからデータを探してくるメソッド。

    all # 全員集合!
    find(id) # ピンポイントで「このIDの人」を1人連れてきて。
    find_by(name: "...") # 名前などの条件で、最初に見つかった1人を連れてきて。
    where(age: 20) # 条件に合う人を「全員」集めて。
    order(:age) # 年齢順に並べて。

    ❷ 保存・更新・削除系(Create, Update, Delete)

    データの中身を操作するメソッド。

    create # 新しく作って、そのまま保存まで完了。
    save # 今持っているデータを「決定!」として保存。
    update # 中身を書き換えて保存。
    destroy # そのデータを消し去る。

    ❸ 計算・集計系

    データの数を数えたり、合計を出したりする便利なメソッド。

    count # 今何人いる?
    maximum(:age) # 一番年上は何歳?
    sum(:price) # 合計金額はいくら?


    ⚫️ newメソッド

    user = User.new(name: “Alice”, age: 25)

    newはActiveRecordモデルの新しいインスタンスを生成しますがデータベースには保存されません。
    オブジェクトがメモリ上に生成されるだけで、必要に応じて.saveを実行し保存します。

    def create @user = User.new(user_params) # まずは仮で作る
    if @user.save
    # 保存に成功したらトップページへ
    redirect_to root_path else
    # 保存に失敗(入力ミス等)したら、もう一度入力画面を表示
    render :new end end

    new を使ってインスタンスを作っておくと、保存に失敗したときに なぜ失敗したのか(エラーメッセージ)をそのインスタンスが保持してくれます。それをView(画面)に渡すことで、ユーザーにエラーを伝えることができるのです。


    ⚫️ saveメソッド
    save は、オブジェクトの状態に応じて新規作成(INSERT)または更新(UPDATE)のいずれかのSQL文を発行します。

    user = User.new(name: "Runteq", email: "runteq@example.com")
    user.save

    成功すれば true 、失敗すれば false を返すため、データが正しく保存されたかどうかを簡単に確認できます。


    ⚫️ updateメソッド
    update は「属性の変更」と「保存(UPDATE文)」を一度に行うメソッド。
    バリデーションも実行され、問題なければSQLのUPDATE文で変更内容だけを DB に反映する。

    user = User.find(1)
    user.update(name: “Charlie”)


    ⚫️ findメソッド
    find は、主キー(通常はid)を基に特定のレコードを検索するメソッド。
    必ず該当するレコードを返し、存在しない場合は例外(ActiveRecord::RecordNotFound)を発生させます。

    user = User.find(1)


    ⚫️ find_byメソッド

    find_by は、指定した条件に一致する最初のレコードを返すメソッド。
    見つからなければ nil を返すため例外を発生させずに条件検索が可能です。

    user = User.find_by(name: “Alice”)

    ➡︎ユーザーからの情報を受け取るcontrollerでfind_byを使うことで、ユーザーは自分の名前を検索で探しだすことができる。

    modelでは扱いやすいfindを使い、名前とIDをセットで読み込ませることでユーザー側と制作者側の操作しやすい設計にできる。

    ⚫️ whereメソッド
    where は、条件に合う複数レコードを取得するメソッド。
    結果は ActiveRecord::Relation として返るので、さらに絞り込みや並び替えができる。
    where = 条件検索(複数)+ チェーン可能な検索結果

    user = User.where(age: 25)


    ⚫️ allメソッド
    モデルに対応するテーブルの全レコードを取得するメソッド。
    結果はActiveRecord::Relationなのであとから条件追加や並び替えができる。
    all = 全件取得 + チェーン可能な検索結果

    user = User.all


    ⚫️ destroyメソッド(Delete操作)
    destroy は、レコード削除時にコールバックを実行しながら削除するメソッド。
    コールバックで削除を止めることもでき、問題なければ DB で DELETE が実行される。

    user = User.find(1)
    user.destroy


    ⚫️ deleteメソッド

    delete メソッドは、対象のレコードを即座に削除しますが、destroy と異なり、ActiveRecordのコールバックは実行されません。
    関連処理が不要なときやパフォーマンス重視の場面で使われる。

    user = User.find(1)
    user.delete


    🔸ActiveRecordの命名規則
    クラス名

    キャメルケース(各単語の頭文字を大文字にする記法)
    例➡︎ BookAuthor
    テーブル名:スネークケース(すべて小文字+単語の区切りにアンダースコア)
    例➡︎ book_authors

    🔸スキーマの規約
    外部キーは参照先モデル名の単数形 + _idになる(例➡︎ user_id)。
    Rails がテーブルを作ると自動でタイムスタンプ用のカラム created_at / updated_at が追加される。これらは Rails がデータ構造を標準化するための基本ルール。

    🔸コールバック
    データの保存や削除など特定のアクションの前後に自動的に呼び出されるメソッド。
    モデルの一貫性を保ち、処理の書き忘れを防ぎ、コードを整理できる。

    主なコールバック👇

    画像
    コールバックが多すぎるとどのタイミングで何が起こるのか
    把握しにくくなるため使いすぎには注意する必要があります。

    保存前(new)➡︎ データは自身のPCのメモリ上にしかありません。この状態でPCの電源を切ったり、プログラムを終了したりすると、データは消えてなくなります。

    保存後(save)➡︎ データがストレージ(HDDやSSD)の中のデータベースファイルに書き込まれます。これで、後からいつでも取り出せる永続的なデータになります。


    💡ActiveRecord の仕組みと主要メソッドを理解しておくと、Rails のモデル操作が直感的に扱えるようになります。

     
     
    初めまして。学習📖していることを投稿しています👩‍💻 フィードバックを頂けると嬉しいです。

    あなたへのおすすめ