Rails アソシエーション
アソシエーションとは
モデル間の繋がりを持たせること
アソシエーション(関連付け)を宣言する機能のこと。
( DBの構造の設計+Railsの規約に従い、1:Nの関係はモデルに記載すること)
関連付けを使う理由
関連付けを行うことで、コードの共通操作がシンプルになって扱いやすくなる!
1対Nの関係とは
データベースのテーブル間で1つのレコードが複数のレコードと関連付けられるリレーションシップを指す。
リレーションシップとは
データベースのテーブル間の関連性を表す用語
1対1、1対多、多対多など。
データベース管理システム(DBMS)において外部キー(Foreign Key)を使って実装される。
リレーションシップを表現するためにアソシエーションを利用する。
実装ステップ
- アソシエーションを作りたい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に関連付けられます。
今日はここまで!
明日から課題3の作成に入るけど、Bootstrapの部分とか特に理解できていないから
作りながら改めて学んでいきたい
そしてまだウィークリーレポートかけてないから、明日も早く起きてやらねば💪🏻🏋🏻
メンターさん利用できない日だったが、小さなエラーは時間使うことなく
スムーズに解決できて進められてよかった。
やっぱりいっぱいコードを書くことが重要だな、頑張ろう!
Discussion