2
1

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】

Last updated at Posted at 2020-12-06

#フォロー機能とは
まずはじめに、フォロー機能とはなんなのか?
Twitterをしているとよく分かると思うのですが、
フォローしたり、フォローされたり、そういった機能のことです。

具体的にどういった仕組みで成り立っているのか?
一つずつ紐解いていきます。

まず、登場人物として、
・フォローする側のユーザー
・フォローされる側のユーザー
がいます。

つまり、ユーザー同士の多対多の関係であると言えます。

そして、多対多ということは、
中間テーブルが必要になってきます。

しかし、ここで問題が発生してきます。

例えば、いいね機能を実装するときをイメージしてほしいのですが、
いいね機能で必要なモデルは
・userモデル
・postモデル
・likeモデル(中間テーブル)
この3つが必要になってくるわけです。
Image from Gyazo

ただ今回のフォロー機能の場合、
中間テーブルをRelationshipモデルとした時、
・Usersモデル
・Relationshipモデル(中間テーブル)
この2つしか存在しません。
つまり、User→Relationship→Userという流れでデータを引っ張ってきます。
Image from Gyazo

そうすると、Userモデルの中に
・フォローする側
・フォローされる側
っていうのがごっちゃになってしまうので、
うまくそれらを分けてあげる必要があります。

#DB設計
##UserとUserの多対多の関係
仮にUserモデルの中を
・フォローする側  → Followingモデル
・フォローされる側 → Followerモデル
とします。

Image from Gyazo

で、中間テーブルを
Relationshipモデルとします。
・Followingモデルのid → following_id
・followerモデルのid  → follower_id

Image from Gyazo

##しくみ
ここまでをまとめると
FollowingとFollowerは同じUserモデルであり、
フォローするかされるかで呼び方が変わるようなイメージです。

例えば、
Twitterで、
自分のフォローを見る時、自分のid(following_id)とペアのfollower_idを引っ張ってくることで見ることができる
Image from Gyazo

自分のフォロワーを見る時、自分のid(follower_id)とペアのfollowing_idを引っ張ってくることで見ることができる
Image from Gyazo

つまり、上記の例より
自分のidが
・following_idであれば、フォローを見ることができる
・follower_idであれば、フォロワーを見ることができる
というわけです。

今回はいったんここまで。
具体的な実装については後日あげます。

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?