DAY34 Association : `has_many `

TOKHEE·2024년 5월 9일
0

2. 1:n 関係 — has_many アソシエーション

  • 一対多(1:n)の関係を表現
  • 一つのモデルのインスタンスが他のモデルの複数のインスタンスと関係を結ぶことを示します

1) 基本概念

  • has_many 関係では、「一つ」のエンティティが「複数の」関連エンティティを持つことができます
  • 例えば、一つのブログポストは複数のコメントを持つことができます
    • ここでの Post モデルは Comment モデルとの has_many 関係があります
    • Post 一つに複数の Comment が接続できることを意味します

2) モデル設定

  • 主モデルに has_many キーワードを使用して関係を宣言
  • 関係の名前は関連モデルの複数形で表現されます
    • 例えば、一つの Post が複数の Comment を持つ場合は comments となります
class Post < ApplicationRecord
  has_many :comments
end

3) 関係の使用

  • 関係が設定されると、Post モデルのインスタンスは .comments メソッドを通じて接続された全ての Comment オブジェクトにアクセスできます
  • このメソッドは Comment の集合を返します
  • この集合に対して配列のように動作する多くのメソッド(eachmapfind など)を使用できます
# 特定のポストの全コメントを取得する例
@post = Post.find(1)
@comments = @post.comments

4) 生成と接続

  • 新しい関連オブジェクトを生成して自動的に接続することが簡単に可能です
  • build メソッドや create メソッドを使用します
  • それぞれ新しいオブジェクトをメモリにのみ生成するか、データベースに保存してオブジェクトを返します
@post = Post.find(1)
@comment = @post.comments.create(body: "Great post!")

5) オプションと拡張

  • :class_name オプションを通じて実際のクラス名と異なる名前を関係名として使用できます
  • :through オプションを使用して他のモデルを経由する複雑な関係を設定できます
  • :dependent オプションを使用して関連オブジェクトのライフサイクルを親オブジェクトと連動させることができます(例:dependent: :destroy)。
class User < ApplicationRecord
  has_many :posts
  has_many :comments, through: :posts
end

0개의 댓글

관련 채용 정보