Railsのモデル間の関連付けについて

こんにちは!

今回はRailsのモデル間の関連付けについてまとめます。

モデル間の関連付けとは

  • テーブルとテーブルを結びつけて扱いやすくすること
  • テーブル間の関係により、1対多の関連付けや多対多の関連付けなどがある

1対多の関連付け

  • 一つのレコードは一つのレコードのみを参照し、一つのレコードは複数のレコードから参照されるような関係

例)自動車と車輪

  • 自動車は複数の車輪を持つ
    • 一つの自動車を複数の車輪が参照する
    • 自動車は複数の車輪を持つが、車輪は一つの自動車のみに所属する関係

関連付けの方法

クラス メソッド 引数
1 has_many : + モデルの複数形
belongs_to : + モデルの単数形

コード例

class Car < ApplicationRecord
  has_many :wheels
end

class Wheel < ApplicationRecord
  belongs_to :car
end

使用方法

クラス 取り出し方 追加方法
1 @car.wheels @car.wheels << @wheel
@wheel.car @wheel.car = @car
@wheel.save

多対多の関連付け

  • 一つのレコードは複数のレコードを参照し、一つのレコードは複数のレコードから参照されるような関係

例)自動車とドライバー

  • 複数の自動車と複数のドライバーがいる
    • ドライバーは一部の自動車のみ運転できる
    • ドライバーから見ると複数の自動車を運転でき、自動車から見ると複数のドライバーに運転される

関連付けの方法

  • 中間テーブルを作成する
    • 例としてassignmentを作成
クラス メソッド 引数
中間 belongs_to
belongs_to
: + モデルの単数形
has_many
has_many
: + 中間テーブルの複数形
: + モデルの複数形,
through: + : + 中間テーブルの複数形

コード例

class Assingment < ApplicationRecord
  belongs_to :car
  belongs_to :driver
end

class Car < ApplicationRecord
  has_many :assignments
  has_many :drivers, through: :assignments
end

class Driver < ApplicationRecord
  has_many :assignments
  has_many :cars, through: :assignments
end

使用方法

取り出し方 追加方法
@car.drivers @car.drivers << @driver
@driver.cars @driver.cars << @car

おわりに

今回はRailsのモデル間の関連付けについてまとめました。Railsは複数テーブルを簡単に扱うことができて便利ですね。まだ多対多を使ったアプリは作れていないので、そろそろ新しい自作アプリを作ろうかと思います。

61/100