【171日目】【1日20分のRailsチュートリアル】【第12章】フォロワーの関連付けを追加する
今日は「12.1.5 フォロワー」から。
12.1.5 フォロワー
リレーションシップというパズルの最後の一片は、user.followersメソッドを追加することです。これは上のuser.followingメソッドと対になります。
(中略)
したがって、データモデルは図12.9のようになります。
対になってるのは分かったけど、いきなり出てきたpassive_relationships
に困惑した…。
フォローしているユーザーを表すテーブルをactive_relationships
としてたので、フォロワーを表すテーブルをpassive_relationships
とする、ってことだよね。
で、その実態はRelationshipモデル、と。見方を変えただけかな。たぶん
図12.9を参考にしたデータモデルの実装をリスト12.12に示しますが、この実装はリスト12.8とまさに類似しています。
app/models/user.rb
has_many :passive_relationships, class_name: "Relationship", foreign_key: "followed_id", dependent: :destroy : has_many :followers, through: :passive_relationships, source: :follower
一点、リスト12.12で注意すべき箇所は、次のように参照先 (followers) を指定するための:sourceキーを省略してもよかったという点です。
へー、そうなんだ。
following
は明示的に指定してあげないと駄目だけど、followers
はRailsが探してくれるのかー。
次に、followers.include?メソッドを使って先ほどのデータモデルをテストしていきます。テストコードはリスト12.13のとおりです。
サンプルアプリケーションで実際に使う一行だけ追加。フォロワーはメソッド追加しなくていいのかー。
test/models/user_test.rb
assert archer.followers.include?(michael)
テストが問題なく通ることを確認。
$ bundle exec rake test 63 tests, 313 assertions, 0 failures, 0 errors, 0 skips
今日の学習時間は【28分】。
次は「12.2 フォローしているユーザー用のWebインターフェイス」から。