質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

3回答

398閲覧

rails-tutorialのフォロー機能の仕組みについて

rosalia

総合スコア20

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

2クリップ

投稿2020/04/21 11:14

現在rails-tutorialで14章のフォロー機能のモデリングを勉強しているのですが

user.rb

has_many :active_relationships, class_name: "Relationship", foreign_key: "follower_id", dependent: :destroy has_many :passive_relationships, class_name: "Relationship", foreign_key: "followed_id", dependent: :destroy has_many :following, through: :active_relationships, source: :followed has_many :followers, through: :passive_relationships, source: :follower

relationship.rb

belongs_to :follower, class_name: "User" belongs_to :followed, class_name: "User"

以上のコードで、has_manyの:sourceはbelongs_toの関連名を指しているのでしょうか?また、

belongs_to :follower, class_name: "User"

はRelationshipのどのカラムとUserのどのカラムを結び付けているのでしょうか?

ややこしく読みづらいとは思うのですがご教授お願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

自己解決致しましたので締めます。

投稿2020/07/06 09:17

rosalia

総合スコア20

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

uerrb

1 has_many :active_relationships, class_name: "Relationship", 2 foreign_key: "follower_id", 3 dependent: :destroy 4 has_many :passive_relationships, class_name: "Relationship", 5 foreign_key: "followed_id", 6 dependent: :destroy

この記述があるので、user_idがそれぞれ外部キーなっています
例えばuser太郎、花子がいたとして、太郎は花子を一方的にフォローしているとします。

userテーブル

idname
1太郎
2花子

この場合、
太郎のuser_id:1がfollwer_id:1に変換される
花子のuser_id:2がfollowed_id:2に変換される

結果、

relationshipテーブル

idfollower_idfollowed_id
112

このようになります。
説明がわかりにくいと思いますがざっとこんな感じです。

投稿2020/04/22 05:50

noriochan

総合スコア53

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

Q:以上のコードで、has_manyの:sourceはbelongs_toの関連名を指しているのでしょうか?
A:質問の意図が読み取り辛いですが、私の推測ではそうです。
今回の場合は、followerの複数形はfollowers。
followedの複数形をfolloweds、にしたいところですがfollowedsという単語が存在しないのでfollowingにしています。そしてfollowedとfollowingの関係がわかりやすいようにsource: :followedと書いています。

Q:RelationshipのどのカラムとUserのどのカラムを結び付けているのでしょうか?
A:カラム同士の結び付きではなくて、モデル同士の結びつきです。
relationshipモデルはUserモデルに属している。
そして今回の場合は属する経路が2つあって、
1つがfollower経由、2つ目がfollowed経由という事です。
この記事が参考になるかと リンク内容

投稿2020/04/21 18:09

noriochan

総合スコア53

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rosalia

2020/04/22 03:37

ご回答ありがとうございます。大分理解が進みました。 もう一つご質問があるのですが、:throughで中間テーブルを取り出した後はbelongs_toの仕組みというか、どう作用しているのかいまいちわかりません。Userモデルのidが外部キーに定義でもされているのでしょうか?
rosalia

2020/04/22 08:36

何度もすみません。聞きたいことは、belongs_toはfollower_idとfollowed_idのどちらを参照してUserモデルを取り出しているのか判別がつかず、どうしたらいいのか、というようなことでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問