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

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

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

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

Q&A

解決済

1回答

2462閲覧

フォローしたユーザーの投稿一覧ページ作成

katakihi

総合スコア1

Ruby on Rails 5

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

1グッド

1クリップ

投稿2020/07/02 02:17

編集2020/07/02 02:22

前提・実現したいこと・現在のコード

railsでインスタグラムのような画像投稿システムを作成しています。
現在フォロー・フォロワー機能、投稿機能・(すべてのユーザーの)投稿一覧ページを作成済みで、
フォローしたユーザーのみの投稿一覧ページの作成に取り掛かっていますがエラーが起きてしまいす。

routes.rb def following_posts @user = User.find(params[:id]) @users = @user.followings end
users_controller.rb get "/users/:id/following_posts/" => "users#following_posts" ・ ・ ・ resources :users do member do get :following, :followers,:users_posts end end
following_posts.html.erb <div class="row"> <% @users.posts.each do |post| %> <div class="col-md-4" > <div> <h6><%= post.caption %></h6> <%= link_to post_path(post) do %> <%= image_tag post.photos.first.image.url(:medium) %> <% end %> </div> </div> <% end %> </div>

発生している問題・エラーメッセージ

<% @users.posts.each do |post| %>

のところでエラーが発生してしまいます。
エラーメッセージ

app/views/users/following_posts.html.erb where line #14 raised:

undefined method `posts' for #User::ActiveRecord_Associations_CollectionProxy:000000000000000

試したこと

<% @user.posts.each do |post| %>

では、該当のidのユーザーの投稿を取り出すことができました。
また

<% @user.followings.each do |user| %> <table> <tr> <td> <%= user.username %> </td> </tr> </table> <% end %>

とすると、フォローしているユーザーのusernameを表示することはできますが、

フォローしているユーザーの投稿一覧を表示することができません。

わかる方がいましたら、ご教授いただければ幸いです。

ほかに補足しないとわからないコードなどございましたら、できるだけ早く反応するようにいたします。

よろしくお願いいたします。

u.yusuke22👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

User レコードに対して

@user.posts はできますが

@users は複数形なので .posts はできません

@users.includes(:posts).each do |post|

を使ってサブテーブルをジョインする必要があります

投稿2020/07/02 09:02

編集2020/07/02 09:03
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

katakihi

2020/07/02 11:45

ありがとうございます! 無事エラーが解決しました!とても勉強になりました! ただ、 ``` <h6><%= post.caption %></h6> ``` のところで ``` undefined method `caption' for #<User:0x00007f45701276b0> ``` といったエラーが出てしまいました。 ``` <% @user.posts.each do |post| %> ``` のときは、問題なく表示されていて、 @users.includes(:posts).each do |post| も問題ないはずがなぜエラーが出るのか苦戦中です・・・。 原因を調べていますが、なかなかわからず苦戦しています。 もし原因として考えられることがあれば教えていただきたいです。
退会済みユーザー

退会済みユーザー

2020/07/02 15:07

@users.includes(:posts) は型が User なので .each do |user| とかくべきでした user.posts.caption で取り出せます あるいは includes じゃなく joins を使えばカラム自体を追加できるので @users.joins(:posts).each do |post| post.caption ができると思います
katakihi

2020/07/02 16:04

ありがとうございます! 上記の方法を二つとも試したのですが、同じエラーが出てしまいました・・・。 僕自身、 joinsやがeach構文に使えること自体知らないほど無知な初心者なため、 この部分について勉強してみます。 またもしほかに考えられる原因などあれば教えていただければ幸いです。 chinaさん、とても親切にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問