rails 技術ブログ

rails 技術ブログ

勉強したことをアウトプットしていきます

has_manyとbelongs_to【テーブル同士の関連付け】

例:ウェブアプリに登録しているユーザのテーブル(Usersテーブル)とそのウェブアプリで登録したユーザが投稿したつぶやきを管理しているテーブル(Micropostsテーブル)を関連付けしたい


class User < ApplicationRecord
  has_many :microposts
end

↑1人のユーザに複数のつぶやきがあるという関連付け

class Micropost < ApplicationRecord 
  belongs_to :user 
end

↑1つのつぶやきは必ず1人のユーザと結びついているという関連付け


この関連付けをしていることでできること


①ユーザテーブルとつぶやきを管理しているテーブルのデータを合わせて取得できる

>@user = User.first
(ユーザテーブルに登録されている1人目のデータを取得して@userに代入する)  
>@user.microposts
(ユーザテーブルに登録されている1人目のつぶやきを全て表示する)

(↓のように1行で表示することも可)
>User.first.microposts



②いくつかのメソッドが使えるようになる

メソッド 用途
micropost.user Micropostに紐付いたUserオブジェクトを返す
user.microposts Userのマイクロポストの集合をかえす
user.microposts.create userに紐付いたマイクロポストを作成する
user.microposts.create! userに紐付いたマイクロポストを作成する(失敗時に例外を発生)
user.microposts.build userに紐付いた新しいMicropostオブジェクトを返す
user.microposts.find_by(id: 1) userに紐付いていて、idが1であるマイクロポストを検索する

user.microposts.buildはnewメソッドと同様、オブジェクトを返すがデータベースには反映されない

ユーザーが削除されたら投稿も削除されるようにする設定

dependent: :destroyを追加する

class User < ApplicationRecord
  has_many :microposts, dependent: :destroy
end