0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Rails アソシエーション作成時のFK自動付与について

Last updated at Posted at 2021-08-20

model作成を行い、アソシエーションで関連付けを行うと、自動的にFK(外部キー)が付与される。
この規則について考える

User モデルとPostモデルを作成しUserモデルとPostモデルは一対多の関係にあるとする

(userモデルに対するpostモデルのFKはuser_id)
(postモデルに対するuserモデルのFKはuserモデルのPK(主キー))

Screenshot from 2021-08-20 18-44-29.png

画像汚くてすみません。

以下 コード例

user.rb
has_many :posts
post.rb
belongs_to :user

postモデルのbelongs_to :user から考えると、belongs_to でpostの1レコードに対し必ずuserモデルの主キーは存在する。
そのため、post.rbに belongs_to :userと記載することでbelongs_to :モデル名のモデル名を元にして、そのモデルのPKをFKと認識する。

一方,
userモデルのhas_many :posts から見ると参照すべきカラムはPKではない。userモデルの1レコードに対し必ず対応すべきなのはpostモデルでFK用に作成したカラムのuser_idとなる。
そのため、user.rb にhas_many :postsと記載すると、自身のモデル名(今回だとuser)を元に参照先モデルのカラムを探しにいき、(自身のmodel名)_id と一致するカラムをFKと認識する。

【まとめ】
has_manyでは(自身のモデルの名前)_idというカラムを参照先モデルの中から探し、FKとする。
belongs_toでは参照先モデルのPKをFKとする。

間違えていたらコメントください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?