#フォロー機能とは
まずはじめに、フォロー機能とはなんなのか?
Twitterをしているとよく分かると思うのですが、
フォローしたり、フォローされたり、そういった機能のことです。
具体的にどういった仕組みで成り立っているのか?
一つずつ紐解いていきます。
まず、登場人物として、
・フォローする側のユーザー
・フォローされる側のユーザー
がいます。
つまり、ユーザー同士の多対多の関係であると言えます。
そして、多対多ということは、
中間テーブルが必要になってきます。
しかし、ここで問題が発生してきます。
例えば、いいね機能を実装するときをイメージしてほしいのですが、
いいね機能で必要なモデルは
・userモデル
・postモデル
・likeモデル(中間テーブル)
この3つが必要になってくるわけです。
ただ今回のフォロー機能の場合、
中間テーブルをRelationshipモデルとした時、
・Usersモデル
・Relationshipモデル(中間テーブル)
この2つしか存在しません。
つまり、User→Relationship→Userという流れでデータを引っ張ってきます。
そうすると、Userモデルの中に
・フォローする側
・フォローされる側
っていうのがごっちゃになってしまうので、
うまくそれらを分けてあげる必要があります。
#DB設計
##UserとUserの多対多の関係
仮にUserモデルの中を
・フォローする側 → Followingモデル
・フォローされる側 → Followerモデル
とします。
で、中間テーブルを
Relationshipモデルとします。
・Followingモデルのid → following_id
・followerモデルのid → follower_id
##しくみ
ここまでをまとめると
FollowingとFollowerは同じUserモデルであり、
フォローするかされるかで呼び方が変わるようなイメージです。
例えば、
Twitterで、
自分のフォローを見る時、自分のid(following_id)とペアのfollower_idを引っ張ってくることで見ることができる
自分のフォロワーを見る時、自分のid(follower_id)とペアのfollowing_idを引っ張ってくることで見ることができる
つまり、上記の例より
自分のidが
・following_idであれば、フォローを見ることができる
・follower_idであれば、フォロワーを見ることができる
というわけです。
今回はいったんここまで。
具体的な実装については後日あげます。