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

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

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

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

1回答

269閲覧

Railsチュートリアル 14章 フォロー機能に関して

tomoharu

総合スコア107

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

0クリップ

投稿2017/09/17 04:27

rails チュートリアル14章のフォロー機能に関しての質問です。
URL: https://railstutorial.jp/chapters/following_users?version=5.0#sec-a_problem_with_the_data_model

経緯:
フォロー機能(Twitter的な)を作成するために、Userモデルで自己結合させようとしています。
そのためにRelationshipという中間テーブルを作成しました。カラムはfollowed_idとfollower_idの二つです。follower_idは自分のことをfollowしてくれている人のid、followed_idは自分がfollowしている人のidです。

コード:
User

Ruby

1#User.rb 2has_many :active_relationships, class_name:"Relationship",foreign_key: "followed_id",dependent: :destroy 3has_many :followings, through: :active_relationships, source: :true 4has_many :passive_relationships, class_name: "Relationship",foreign_key: "follower_id" ,dependent: :destroy 5has_many :followers, through: :passive_relationships, source: :true

Ruby

1#Relationship.rb 2belongs_to :follower, class_name: "User" 3belongs_to :followed, class_name: "User" 4validates :follower_id, presence: true 5validates :followed_id, presence: true

質問事項:
Userモデルにおいて、なぜactive_relationshipsのforeign_keyがfollowed_id、passive_relationshipsがfollower_idなのですか。
明確な理由がわかりません。

何卒宜しくお願い申し上げます。

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

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

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

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

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

guest

回答1

0

質問にあるURLのリスト14.12 は以下のようになっていて整合性取れているように思います。

リスト 14.12: 受動的関係を使ってuser.followersを実装する app/models/user.rb class User < ApplicationRecord has_many :microposts, dependent: :destroy 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 . . . end

投稿2017/09/17 12:14

issei126

総合スコア108

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

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

tomoharu

2017/09/18 05:11

ご回答ありがとうございます! 申し訳ないのですが、foreign_keyをそうする理由をお伺いしたかったのですが。。。 これは著者が好きでそうしているのか、そうしないとバグになるのか。。。
issei126

2017/09/18 05:37

自分が示したサイトのコードと、質問者さまのコードでの外部キーは逆になっているのは大丈夫でしょうか?? たしかに質問者さまのコードだと意図がわからなくなりますが、サイトのコードであればフォローしている一覧のときはfollower_id、 フォローされている一覧を取得する時はfollowed_idだと思うので自分は腑に落ちました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問