AR삽질러

Rails 一日一つメソッド (Day20) Associations-has_manyメソッド 본문

Ruby/RubyOnRails-日本語

Rails 一日一つメソッド (Day20) Associations-has_manyメソッド

아랑팡팡 2024. 1. 11. 19:06
728x90

 

Rails 一日一つメソッド (Day20) Associations-has_manyメソッド

 

has_manyメソッドとは

 一つのモデルが他のモデルの複数のインスタンスと紐付けることを表す。

 例えば、Authorが複数のBookを持つ事ができるようにしたい場合、Authorモデルに han_many :booksで作成する。

 

has_manyメソッド構文

class モデル名 < ActiveRecord::Base
	has_many :関連名
end

 - 1つのモデルは複数の関連名を持つ。という意味で、has_manyメソッドの引数の関連名は複数形になる。

 

例題)図書館と本

class Library < ApplicationRecord
	has_many :books
end

class Book < ApplicationRecord
	belogns_to :library
end

 - libraryモデルは has_many :booksを通していろんなBookモデルを紐づけられる。

 - Bookモデルは belogns_to :libraryを通して一つの Libraryに属する。

 

Libraryインスタンスは .booksメソッドを使って連関された全ての Bookインスタンスに接近できる。逆に Bookインスタンスは .libraryを使って Libraryに接近できる。

 


has_manyのオプション

 

1) :class_name 

 - 関係を結ぶモデルのクラス名が基本ルール(モデル名の複数形)と異なる場合に使用します。

class Library < ApplicationRecord
	has_many :books, class_name: "BookShop"
end

 

2) :foreign_key 

 - ForeignKeyの名前が慣例と異なる時に使う。関係を結ぶモデルで探すforeignKeyを名詞する。

class Library < ApplicationRecord
	has_many :comments, foregin_key: "author_id"
end

 

3) :primary_key 

 - 関係を結ぶモデルの主キーが基本値(id)と異なる場合に使う。

class Library < ApplicationRecord
	has_many :articles, primary_key: "guid"
end

 

4)  :dependent

 - :destroy, :nullify, :restrict_with_exception, :restrict_with_error などの :dependent:関連オブジェクトのライフサイクルを管理する。

class Library < ApplicationRecord
	has_many :comments, dependent: :destroy
end

 

5) :through

 - 他のモデルを通して間接的関係を設定する。

class Library < ApplicationRecord
	has_many :tags, through: :taggings
end

 

6) :conditions

 - 特定の条件に合うオブジェクトをリータンする。

class Library < ApplicationRecord
	has_many :published_posts, -> { where(published: true) }, class_name: "Post"
end

 

7) :inverse_of

 - 関係の逆方向を名詞して性能を向上させる。

class Library < ApplicationRecord
	has_many :comments, inverse_of: :post
end
728x90
반응형
LIST