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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

Q&A

解決済

1回答

341閲覧

rails user.followingでなぜインスタンスがとり出せるのか

suny

総合スコア48

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

1グッド

1クリップ

投稿2020/03/24 10:29

railsチュートリアルに取り組んでおります。モデル同士の関連付けに関して質問です。

user = User.first
user.following をrailsコンソールで行うと、

#<ActiveRecord::Associations::CollectionProxy [#<User id: 3, name: "Dr. Janie Johnston", email: "example-2@railstutorial.org", created_at: "2020-02-23 10:48:56", updated_at: "2020-02-23 10:48:56", password_digest: "$2a$10$58GliEhsSn7dJ4JUZQxVcOijFrBHqYH0dqJmIl3zyCo...", remember_digest: nil, admin: false, activation_digest: "$2a$10$R2FOJBJSOV/ZzBqrt69SDOolXpk.tnMWnhOTZi99ZfA...", activated: true, activated_at: "2020-02-23 10:48:56", reset_digest: nil, reset_sent_at: nil>,

のようにフォローしているユーザのインスタンス?が出ますが、followingはfollowedカラムのコレクションであり、followedカラムはユーザーのidが入るので、id(数字)のコレクションが出るものだと思っていました。

なぜなら、followingを行う際の active_relationshipは follower_idを外部キーとして指定しているので、followedカラムに入っている値をインスタンスとして認識できると考えていなかったからです。

なぜfollowingを行うとインスタンスがとり出せるのかを理解したいです。よろしくお願いいたします。


該当コード

user

1has_many :active_relationships, class_name: "Relationship", 2 foreign_key: "follower_id", 3 dependent: :destroy 4 5has_many :passive_relationships, class_name: "Relationship", 6 foreign_key: "followed_id", 7 dependent: :destroy 8 9has_many :following, through: :active_relationships, source: :followed 10 11has_many :followers, through: :passive_relationships, source: :follower

relationship

1 belongs_to :follower, class_name: "User" 2 belongs_to :followed, class_name: "User" 3 validates :follower_id, presence: true 4 validates :followed_id, presence: true
shinoharat👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

なぜfollowingを行うとインスタンスがとり出せるのかを理解したいです。

それがhas_many through:が行っていることです。「id(数字)のコレクション」を介してUserを読み込んで、モデル配列として使えるようにしています。

投稿2020/03/24 12:32

maisumakun

総合スコア146018

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問