ぞえの技術めも

Ruby on Rails勉強中

【168日目】【1日20分のRailsチュートリアル】【第12章】UserモデルとRelationshipモデルの関連付け

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

今日は「12.1.2 User/Relationshipの関連付け」から。

12.1.2 User/Relationshipの関連付け

フォローしているユーザーとフォロワーを実装する前に、UserとRelationshipの関連付けを行います。
1人のユーザーにはhas_many (1対多) のリレーションシップがあり、このリレーションシップは2人のユーザーの間の関係なので、フォローしているユーザーとフォロワーの両方に属します (belongs_to)。

うーん、よく分からない…。active_relationshipsactiveってどこから来たんや…。relationshipsじゃ駄目なの…??

Micropostと似たような実装にはなるけど、そのままそっくりでは駄目で、クラス名を明示してあげる必要があるのは分かった。

先ほどの説明をコードにまとめると、UserとRelationshipの関連付けはリスト12.2リスト12.3のようになります。

ふむふむ、Relationshipモデル内にはユーザーIDと関連付ける属性が2つあるので、それぞれ別の名前付けないとね、ってことか。
で、設計時点でfollowerfollowedを用意しているのでそれぞれどっちもUserモデルと関連してるよ、って明示しないといけないのかー。

app/models/user.rb

  :
  has_many :active_relationships, class_name:  "Relationship",
                                  foreign_key: "follower_id",
                                  dependent:   :destroy
  :

app/models/relationship.rb

class Relationship < ActiveRecord::Base
  belongs_to :follower, class_name: "User"
  belongs_to :followed, class_name: "User"
end

(ユーザーを削除したら、ユーザーのリレーションシップも同時に削除される必要があります。そのため、関連付けにdependent: :destroyも追加しています。)

なるほど。便利だなぁ。

今日の学習時間は【23分】

次は「12.1.3 Relationshipのバリデーション」から。