Web Marina

日々の業務や勉強などで得た知識をアウトプットしていきます。

読解力の無さでつまずく。

f:id:song-of-life1352607:20170214221624p:plain

こんにちは、マリンです。

前に公言した目標設定よりちょっと早く13章が終わったので、

今日から14章に入りました。

song-of-life.hatenablog.com

そして初っ端でガッツリ詰まりました。

しかも自分の読解力の欠如が原因で・・・

概要

14.1.1 データモデルの問題(および解決策)において、

UserとFollowingの関係性が理解できない。

詳細

本文での説明はこうです。

あるユーザーが、別のユーザーをフォローしているところを考えてみましょう。具体例を挙げると、CalvinはHobbesをフォローしています。これを逆から見れば、HobbesはCalvinからフォローされています。CalvinはHobbesから見ればフォロワー (follower)であり、HobbesはCalvinによってフォローされている (followed) ことになります。 Railsにおけるデフォルトの複数形の慣習に従えば、あるユーザーをフォローしているすべてのユーザーの集合はfollowersとなり、user.followersはそれらのユーザーの配列を表すことになります。 残念なことに、この名前付けは逆についてはうまくいきません (Railsのというより英語の都合ですが)。フォローされているすべてのユーザーの集合は、このままではfollowedsとなってしまい、英語の文法からも外れるうえに非常に見苦しいものになってしまいます。 そこで、Twitterの慣習にならい、本チュートリアルではfollowingという呼称を採用します (例: “50 following, 75 followers”)。したがって、あるユーザーがフォローしているすべてのユーザーの集合はcalvin.followingとなります。

そしてこのモデリングを図で表したのがこちら。

f:id:song-of-life1352607:20170214222206p:plain

で、思うわけです。

「え?なになに?followerはフォロワーだよね?followedがfollowing??で、どれがだれのこと表してんの??」と。

要はこのテーブルがだれ目線のものかがわかっていなかったからこんがらがったんですね。

気にしなきゃいい話なんですけど・・・

解決策

全部Calvin目線で考えることにしました。

  • userテーブルは自分

  • followingテーブルを、自分をfollowerとして見た場合のフォローしている相手リストのテーブルとすると・・・

  • follower_id → フォロワーである自分自身のid

  • followed_id → フォローした相手のid

こんな感じで考えたらスッキリしました。

多分「フォローされている」の部分がこんがらがったんでしょうね。

どちら目線かが念頭にないとうまく理解できないです。

まぁ、そこまで気にしなきゃいい話なんですけど・・・

でも「物事を噛み砕いて理解していく。」という良い訓練にはなった!と信じています。