こんにちは!
今回は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