###User/Relationshipの関連付け
####能動的関係に対して1対多(has_many)の関連付けを実装する
app/models/user.rb
class User < ApplicationRecord
has_many :microposts, dependent: :destroy
# 他のモデルとの間に「1対多」のつながり
# has_many関連付けが使われている場合、
# 「反対側」のモデルでは多くの場合belongs_toが使われます。
# dependent: :destroy
# ユーザーが破棄された場合
# 、ユーザーのマイクロポストも同様に破棄される。
has_many :active_relationships, class_name: "Relationship",
# :active_relationsshitps 能動的関係(フォローしているがフォローはされていない関係)
# class_name: テーブル名 "Relationship"
foreign_key: "follower_id",
# foreign_key: 外部キー
# データベースの二つのテーブルを繋げる
# Micropostモデルとrelationshipsモデルを繋げる
dependent: :destroy
# ユーザーが削除されるとマイクロポストも削除される
.
.
.
end
####リレーションシップ/フォロワーに対してbelongs_toの関連付けを追加する
app/models/relationship.rb
###演習
1.
コンソールを開き、表 14.1のcreateメソッドを使ってActiveRelationshipを作ってみましょう。データベース上に2人以上のユーザーを用意し、最初のユーザーが2人目のユーザーをフォローしている状態を作ってみてください。
>> user.active_relationships.create!(followed_id: User.second.id)
User Load (0.1ms) SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT ? OFFSET ? [["LIMIT", 1], ["OFFSET", 1]]
(0.1ms) begin transaction
User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]]
User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 2], ["LIMIT", 1]]
Relationship Create (7.0ms) INSERT INTO "relationships" ("follower_id", "followed_id", "created_at", "updated_at") VALUES (?, ?, ?, ?) [["follower_id", 1], ["followed_id", 2], ["created_at", "2021-10-28 06:05:06.051991"], ["updated_at", "2021-10-28 06:05:06.051991"]]
(7.1ms) commit transaction
=> #<Relationship id: 1, follower_id: 1, followed_id: 2, created_at: "2021-10-28 06:05:06", updated_at: "2021-10-28 06:05:06">
先ほどの演習を終えたら、active_relationship.followedの値とactive_relationship.followerの値を確認し、それぞれの値が正しいことを確認してみましょう。
わかんない。