🐰

Rails アソシエーション

2023/04/08に公開

アソシエーションとは

モデル間の繋がりを持たせること
アソシエーション(関連付け)を宣言する機能のこと。

( DBの構造の設計+Railsの規約に従い、1:Nの関係はモデルに記載すること)

関連付けを使う理由

関連付けを行うことで、コードの共通操作がシンプルになって扱いやすくなる!

1対Nの関係とは

データベースのテーブル間で1つのレコードが複数のレコードと関連付けられるリレーションシップを指す。

リレーションシップとは

データベースのテーブル間の関連性を表す用語
1対1、1対多、多対多など。
データベース管理システム(DBMS)において外部キー(Foreign Key)を使って実装される。
リレーションシップを表現するためにアソシエーションを利用する。

実装ステップ

  1. アソシエーションを作りたい2つのモデル間の関係性を確認
  2. どのアソシエーションを使用するかを確認

Railsでは、主に以下の6種類のアソシエーションがある

  • belongs_to(従属関係)
  • has_one(1対1関係)
  • has_many(1対多関係)
  • has_many :through(多対多関係)
  • has_one :through(1対1関係で中間テーブルを介する)
  • has_and_belongs_to_many(多対多関係で中間テーブルを明示しない)

たとえば、あるモデルが他のモデルに従属している(belongs_to)と宣言すると、2つのモデルのそれぞれのインスタンス間で「主キー - 外部キー」情報を保持しておくようにRailsに指示します。同時に、いくつかの便利なメソッドもそのモデルに追加されます。

has_many

1:N の「1」側にあたるモデルに、has_many を記載する必要がある
ほとんどの場合「has_many」には「dependent: :destroy」を付けて実装するのでセットで覚えておく。

belongs_to

1has_many とは逆に、1:N の「N」側にあたるモデルに、belongs_to を記載する必要がある

主キー(Primary Key)

主キーとは、「テーブルの情報を一意に識別するためのもの」
Railsでは、デフォルトでidカラムが主キーとして使用される。
主キーは、自動的に連続した整数値が割り当てられるため、同じテーブル内で一意の値が保証される。

外部キー(Foreign Key)

「他のテーブルのデータを参照する事が出来るように制約を付けたカラムのこと」
外部キーは、関連付けられるテーブルの主キーを参照している。
これにより、2つのテーブル間でリレーションシップが確立される。

φ(・
例として、PostモデルとCommentモデルが1対多の関係にある場合を考えます。
Postモデルの主キーはidで、Commentモデルにはpost_idという外部キーがあります。
Commentモデルのpost_idは、関連するPostモデルのidを参照しています。
これにより、各Commentが特定のPostに関連付けられます。

https://railsguides.jp/association_basics.html#:~:text=Railsの「関連付け(アソシエーション%3A,て扱いやすくなります。

https://pikawaka.com/rails/association


今日はここまで!
明日から課題3の作成に入るけど、Bootstrapの部分とか特に理解できていないから
作りながら改めて学んでいきたい
そしてまだウィークリーレポートかけてないから、明日も早く起きてやらねば💪🏻🏋🏻

メンターさん利用できない日だったが、小さなエラーは時間使うことなく
スムーズに解決できて進められてよかった。
やっぱりいっぱいコードを書くことが重要だな、頑張ろう!

Discussion