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