Rails Tutorialやってみた!47(14章-3)

公開日:2019-05-19
最終更新:2019-05-19

100DaysOfCode 73/100

今日やること

  • 「フォロー」のモデリング
  • 「フォロワー」のモデリング

フォローしているユーザー

多対多の関係では中間テーブルおよび外部キーが用いられることを学びました。

これをRailsで使うためには、has_many throughという関連付けを使います。

has_many :followeds, through: :active_relationships  

has_manyに対応する属性は複数形となるため、原則的にはこのような書き方になります。

しかし、見ての通りfollowedsというのは英文法として誤っています。この場合は、独自の名称を用意して明示的にsourceで参照する属性を指定する必要があります。

has_many :following, through: :active_relationships, source: :followed  

これまで同様、関連付けが成功したことによって例えば「特定のユーザーのフォローしているユーザーを調べる」などが、配列と同じように扱えるようになっています。

フォロー、アンフォロー機能の実装

ツイッターのフォロー、アンフォローをイメージするとすごく難しい機能の実装に思えてきますが……。

現段階でのフォローとは、あるユーザーのactive_relationshipsレコードを追加する機能にすぎません。

ユーザーAがBをフォローしたときには、Aの:followedにBが追加され、フォローを解除したときには削除される……これだけです。

前述したように、関連付けによって配列と同じように:followedへの追加が行えるようになっていますから、

def follow(other_user)  
    following << other_user  
  end  

このメソッドだけで、あるユーザーを「フォロー」する機能が実装できました!

これらの機能が実際にアプリの機能として使えるようになるのはまだ先なので、まずはテストを先に書くことで正しく動作していることを確認していきます。

フォロワー

ユーザーAがBをフォローしている(能動的関係)とき、BにとってAはフォロワー(受動的関係)です。

受動的関係を実装するために、active_relationshipsとは生反対のpassive_relationshipsというデータモデルを用意します。

active_relationshipspassive_relationshipsもゼロからまったく新しいテーブルを作っているわけではなく、あくまで中間テーブルとしてひとつひとつのレコードを格納しているrelationshipsテーブルから生まれたものです。

終わりに

もちろん本文の通りに進めればテストはパスしますが、漠然と進めているとすぐに分からなくなってしまいそうです!

100%完璧な理解を求めるといつまで経っても進まなくなってしまうかもしれないので、ある程度の「納得感」を得られる状態になったらまずは先に進み、あとは手を動かしたり復習することで定着させていけるようにしたいです。

次回以降やること

  • follow のWebインターフェースを作る
記事が少しでもいいなと思ったらクラップを送ってみよう!
12
+1
@tammcの技術ブログ

よく一緒に読まれている記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる

技術ブログをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

技術ブログを開設する

Qrunchでアウトプットをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

Markdownで書ける

ログ機能でアウトプットを加速

デザインのカスタマイズが可能

技術ブログ開設

ここから先はアカウント(ブログ)開設が必要です

英数字4文字以上
.qrunch.io
英数字6文字以上
ログインする