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

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

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

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

Q&A

解決済

1回答

475閲覧

[rails]1つのビューで2つの関連するモデルからデータを取得したい。

mttkd399

総合スコア13

Ruby on Rails

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

0グッド

0クリップ

投稿2018/03/23 03:53

編集2018/03/24 07:06

あるユーザーが過去にお気に入りしたブログと、お気に入りした日付を一画面に表示したいです。
各テーブルは以下のようなデータを持っています。

user
-id

blog
-user_id
title

favorite_statuses
-user_id
-blog_id
-registered_at

また、アソシエーションは以下のような設定になっています。

ruby

1# user.rb 2class User < ApplicationRecord 3 has_many :blogs 4 has_many :favorite_statuses 5 has_many :favorite_blogs, through: :favorite_statuses, source: :blog 6end 7 8# blog.rb 9class Blog < ApplicationRecord 10 has_many :favorites_statuses 11end

ruby

1#users_controller.rb 2def favorite_history 3 @favorite_statuses = current_user.favorite_statuses 4end

haml

1 - @favorite_statuses.each do |favorite_status| 2 = favorite_status.blog.title 3 = favorite_status.registered_at 4

このようにしているのですが、望んだデータが表示できていないみたいです。
どこを修正したらいいかご教示いただきたいです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

表示ができていないとは、エラーが出ているのでしょうか。

コードを見た限りでは、controllerでセットしてるインスタンス変数と
viewで呼び出ししているインスタンス変数が異なることだけのように思います。

haml

1 - @purchase_statuses.each do |purchase_statuse| 2 = purchase_statuse.blog.title 3 = purchase_statuse.registered_at 4

投稿2018/03/23 10:48

mikorasu

総合スコア34

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

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

mttkd399

2018/03/24 07:11

ご指摘ありがとうございます。誤字がありましたので修正いたしました。 エラーは出てはいないのですが、ビューで取得してきているデータに不整合があるようです。 current_user.favorite_statusesで取得したお気に入り履歴が、別のユーザーのお気に入り履歴と一緒になって取得されているようです。どこに原因があるかわからなかったので質問させていただきました。
mikorasu

2018/03/24 13:25 編集

諸々と省略されて書いているようなので確認の為に、一応書きますね。 ```ruby # user.rb class User < ApplicationRecord has_many :blogs has_many :favorites has_many :favorite_blogs, through: : favorite_statuses, source: :blog end # blog.rb class Blog < ApplicationRecord belongs_to :user has_many :favorites_statuses end # favorite_statuse.rb class FavoriteStatuse < ApplicationRecord belongs_to :user belongs_to :blog end ``` 以下、試して欲しいコマンド(rails consoleなどで) ### User.first.favorites 発行されるSQLを確認してください。 * User.first SELECT `users`.* FROM `users` ORDER BY `users`.`id` ASC LIMIT 1 * favorites SELECT `favorites_statuses `.* FROM `favorites_statuses ` WHERE `favorites_statuses `.`user_id` = 1 LIMIT 11 こちらは特に問題がないように思います。 ### User.first.favorite_blogs 発行されるSQLを確認してください。 * User.first SELECT `users`.* FROM `users` ORDER BY `users`.`id` ASC LIMIT 1 * favorite_blogs SELECT `blogs`.* FROM `blogs` INNER JOIN `favorites_statuses ` ON `blogs`.`id` = `favorites_statuses `.`blog_id` WHERE `favorites_statuses `.`user_id` = 2 LIMIT 11 favorite_blogsが原因のようですね。 inner_joinをする条件が、blogs.id = favorites_statuses.blog_id となっています。 これでは、自分がお気に入りしたブログではなくて、自分のブログをお気に入り登録してくれたユーザーのブログが取得されるのではないでしょうか。 詳細見えておりませんので、ほぼ憶測で書いておりますので悪しからず。 blogs.user_id = favorites_statuses.user_id となれば良いのだと思います。 > current_user.favorite_statusesで取得したお気に入り履歴が、別のユーザーのお気に入り履歴と一緒になって取得されているようです。 よって、これはお気に入り登録の処理が疑わしいと考えられます。
mttkd399

2018/04/02 08:48

ご指摘の通り、お気に入り登録の処理に誤りがありました。ご丁寧な回答誠にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問