DAY08 Active Record(2) / NEW-CREATE-BUILD

TOKHEE·2024년 3월 25일
0

Active Record(2)

  • Active RecordはRuby on Railsフレームワークで提供されるORM(Object-Relational Mapping)ライブラリ
  • ORMは、オブジェクト指向プログラミング言語を使用してデータベースのテーブルをオブジェクトにマッピング
    ※Javaでは、HibernateやJPA(Java Persistence API)が類似の役割

Active Recordの例

  • 前提)usersテーブルが存在するデータベースあり、このテーブルにはnameとemailフィールドあり

  • Userモデル定義
    Railsでは、このモデルがusersテーブルに自動的にマッピング

class User < ApplicationRecord
end
  • 新しいユーザー作成と保存(NEWメソッド使用時)
user = User.new(name: "jian", email: "ha@example.com")
user.save
  • 新しいユーザー作成と保存(CREATEメソッド使用時)
user = User.create(name: "dayoung", email: "da@example.com")
  • すべてのユーザー照会
users = User.all
  • 特定の条件に合うユーザー照会
user = User.find_by(email: "da@example.com")
  • ユーザー情報更新
user = User.find_by(email: "ha@example.com")
user.name = "young"
user.save

Javaの例で比較

  • JavaでHibernateやJPA使用時、@Entityアノテーションをクラスに付け、そのクラスがデータベーステーブルにマッピングされるエンティティであること示す
@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Column(name = "name")
    private String name;

    // getters and setters
}

Railsのメソッド:new、create、build

new

  • newメソッドは新しいインスタンスをメモリ上にのみ作成
  • このインスタンスはまだデータベースに保存されていない
    => new使用後は、saveメソッドを呼び出してオブジェクトをデータベースに永続的に保存する必要あり
user = User.new(name: "John Doe")
user.save

create

  • newとsaveの機能を一度に実行 = 新しいインスタンスを作成し、それをデータベースに直接保存
  • 別途saveを呼び出すことなくオブジェクトをデータベースに保存
user = User.create(name: "John Doe")

build

  • 主に関連するオブジェクト作成時に使用
  • has_manyやbelongs_toなどのActive Record関係で使用
  • 新しいインスタンスをメモリ上にのみ作成、このインスタンスはすでに親オブジェクトとの関係を持っている
  • collection.buildの形式で使用されることが多い
    => collectionは、親オブジェクトに関連付けられた子オブジェクトの集合を指す
user = User.find(1)
post = user.posts.build(title: "New Post")
post.save

まとめ

  • new:オブジェクトをメモリ上にのみ作成。データベースに保存するにはsaveが必要
  • create:オブジェクトを作成し、直接データベースに保存
  • build:主に関連するオブジェクトの作成に使用。newと似ているが、親オブジェクトとの関係設定が追加
    => これら3つのメソッドは、Ruby言語自体のメソッドではなく、Ruby on Railsフレームワークで提供されるActive Recordライブラリの一部

0개의 댓글

관련 채용 정보