🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Ruby on Rails

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Active Record

Active Recordは、一つのオブジェクトに対しドメインのロジックとストレージの抽象性を結合するデザインパターンです。

Q&A

解決済

1回答

399閲覧

[Rails]ログインユーザーidを使って、異なるテーブルに存在する値を出力したい[ActiveRecord]

zyno

総合スコア41

Ruby

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Ruby on Rails

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Active Record

Active Recordは、一つのオブジェクトに対しドメインのロジックとストレージの抽象性を結合するデザインパターンです。

0グッド

0クリップ

投稿2019/12/17 07:27

編集2019/12/17 08:50

実現したいこと

Railsのアプリケーション開発をしている者です。ログインしているuserのidを利用して、以下のfriend_infoテーブル内にあるnameのフィールドを一覧出力したいと思っています。

[userテーブル]
id

[friendテーブル]
id
user_id

[friend_infoテーブル]
id
friend_id
name
sex
birthday

※userテーブル→friendテーブル→friend_infoテーブルの順で従属関係は成り立っています。
※userテーブル、friendテーブル、friend_infoテーブルにはあらかじめテストデータが入っています。

やったこと

ruby

1//動く 2 def index 3 friends = Friend.find_by(user_id: current_user.id) 4 @friends = friends.friend_info.all 5 end

上記のコードは動きます。画面上にデータが1件だけ表示されました。しかし今回は、「『user_id=ログインユーザー』に合致するfriend_infoテーブル内にあるnameのフィールドを複数件、画面に一覧出力したい」ので、find_byではなく、where句を使いたいです。

しかし、

ruby

1//動かない 2 def index 3 friends = Friend.where(user_id: current_user.id) 4 @friends = friends.friend_info.all 5 end

これだと、二行目のfriendsがNoMethodErrorになります。しかし、friends変数をコンソールで調べたら、値はしっかり入っていました。

どうして想定どおり動かないのか分からなくなってしまったので、ご教授願いたいと考えています。よろしくお願いいたします。

追記:各種テーブルの関連部分

friendの定義部分
belongs_to :user
has_many :friend_infos, dependent: :destroy
validates :user_id, presence: true

friend_infoの定義部分
belongs_to :friend

Userの定義部分
has_many :friends, dependent: :destroy

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

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

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

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

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

winterboum

2019/12/17 08:00

関連を確認したいので、User, Friend, FriendInfo 各モデルの関連定義を追記してください。belongs_to とか has_* とかの部分です
zyno

2019/12/17 08:31

追加しました。
winterboum

2019/12/17 08:41

User のも。 で、???なのですが Friendで has_many :feiend_info になってますが、 has_one ではない? one か many かでviewがだいぶ変わると思うので
guest

回答1

0

ベストアンサー

ruby

1 friends = Friend.where(user: current_user) 2@friends = FriendInfo.where(friend: friends)

もしくは、has_many :through関連付け

ruby

1class User < ApplicationRecord 2 has_many :friends 3 has_many :friend_infos, through: :friends 4end 5 6class Friend < ApplicationRecord 7 belongs_to :user 8 has_many :friend_infos 9end 10 11class FriendInfo < ApplicationRecord 12 belongs_to :friend 13end

を用いて

ruby

1@friends = current_user.friend_infos

投稿2019/12/17 08:55

asm

総合スコア15149

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問