ぞえの技術めも

Ruby on Rails勉強中

【171日目】【1日20分のRailsチュートリアル】【第12章】フォロワーの関連付けを追加する

Ruby on Railsチュートリアル(第3版)

今日は「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は明示的に指定してあげないと駄目だけど、followersRailsが探してくれるのかー。

次に、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インターフェイス」から。