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

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

詳細はこちら
Ruby

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

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Ruby on Rails

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

Q&A

解決済

1回答

2299閲覧

【Rails】お気に入り一覧を表示できない

lion220

総合スコア1

Ruby

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

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Ruby on Rails

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

0グッド

0クリップ

投稿2021/03/16 08:16

編集2021/03/16 13:02

前提・実現したいこと

Railsでレシピサイトを製作中です。お気に入り機能をfavorites中間テーブルにより実装しました。
各ユーザーのページから、各ユーザーがお気に入りをしたレシピの一覧へと遷移する際に以下のエラーメッセージが出ます。

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

NoMethodError in Users#favorites Showing /home/ubuntu/environment/cook/app/views/recipes/_recipes.html.erb where line #7 raised: undefined method `title' for #<Favorite:0x00007fa9bc2fdb78>

該当のソースコード

↓エラーの出ているパーシャルのファイルです。

Ruby

1<% if recipes.any? %> 2 <ul class="list-unstyled"> 3 <% recipes.each do |recipe| %> 4 <li class="media"> 5 <div class="media-body"> 6 <div> 7 <%= link_to recipe.title,recipe_path(recipe.id) %> 8 </div> 9 </div> 10 </li> 11 <% end %> 12 </ul> 13 <%= paginate recipes %> 14<% end %>

↓userのモデルです。

Ruby

1 has_many :favorites,dependent: :destroy 2 has_many :fav_recipes, through: :favorites,source: :recipe,dependent: :destroy

↓userのコントローラです。

Ruby

1class UsersController < ApplicationController 2 3 def favorites 4 @user = User.find(params[:id]) 5 @fav_recipes = @user.favorites.order('created_at DESC').page(params[:page]) 6 end

↓users/show(ユーザー詳細)のビューです。ここでお気に入りレシピへのリンクを押すとエラーになります。

Ruby

1<%=link_to "#{@user.name}",user_path(@user) %>さん 2<%= render 'relationships/follow_button', user: @user %> 3 4 5<li class="nav-item"><a href="<%= user_path(@user) %>" class="nav-link <%= 'active' if current_page?(user_path(@user)) %>">投稿したレシピ一覧 <span class="badge badge-secondary"></span></a></li> 6<li class="nav-item"><a href="<%= followings_user_path(@user) %>" class="nav-link <%= 'active' if current_page?(followings_user_path(@user)) %>">フォロー <span class="badge badge-secondary"></span></a></li> 7<li class="nav-item"><a href="<%= followers_user_path(@user) %>" class="nav-link <%= 'active' if current_page?(followers_user_path(@user)) %>">フォロワー <span class="badge badge-secondary"></span></a></li> 8<li class="nav-item"><a href="<%= favorites_user_path(@user) %>" class="nav-link <%= 'active' if current_page?(favorites_user_path(@user)) %>">お気に入りレシピ <span class="badge badge-secondary"></span></a></li> 9投稿したレシピ一覧 10<%=render "recipes/recipes", recipes: @recipes %>

↓users/favoritesのビューです。開けないページで、ここのパーシャルファイルの呼び出しでエラーが起きています。

Ruby

1 <%=link_to "#{@user.name}",user_path(@user) %>さん 2 <%= render 'relationships/follow_button', user: @user %> 3 4 5 <li class="nav-item"><a href="<%= user_path(@user) %>" class="nav-link <%= 'active' if current_page?(user_path(@user)) %>">投稿したレシピ一覧 <span class="badge badge-secondary"><%= @count_microposts %></span></a></li> 6 <li class="nav-item"><a href="<%= followings_user_path(@user) %>" class="nav-link <%= 'active' if current_page?(followings_user_path(@user)) %>">フォロー<span class="badge badge-secondary"><%= @count_followings %></span></a></li> 7 <li class="nav-item"><a href="<%= followers_user_path(@user) %>" class="nav-link <%= 'active' if current_page?(followers_user_path(@user)) %>">フォロワー <span class="badge badge-secondary"><%= @count_followers %></span></a></li> 8 <li class="nav-item"><a href="<%= favorites_user_path(@user) %>" class="nav-link <%= 'active' if current_page?(favorites_user_path(@user)) %>">お気に入りレシピ <span class="badge badge-secondary"><%= @count_favorites %></span></a></li> 9 お気に入りにしたレシピ 10 <%=render "recipes/recipes", recipes: @fav_recipes %>

試したこと

fav_recipesなどに誤字などを確認しましたが、該当部分にはおそらくないようです。nil Classではないようですが、そこからどう紐解けばいいか困っています。よろしくおねがい致します。

補足情報(FW/ツールのバージョンなど)

初めての質問なので、不備等あったら申し訳ございません。ご教示いただければ幸いです。

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

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

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

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

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

siruku6

2021/03/16 13:08

`@fav_recipes`には、recipeのレコードではなく、favoriteのレコードが入っているようです。 そして、favoriteには`title`というデータが存在しないためにエラーが発生しています。 エラー文のここに書いてあります。 `undefined method `title' for #<Favorite:0x00007fa9bc2fdb78>` それを踏まえて色々試した上で、質問文を編集してみるとよさそうです。 すくなくとも、`@fav_recipes`にはrecipeデータを渡すことになると思います --- それとは別に、各テーブルにどんなカラムがあるのかが回答者に伝わっていないので、migrationファイルも質問文内に掲載した方が良いかもしれません。
lion220

2021/03/16 13:21

ご指摘ありがとうございます。 ご返信をもとに頭を切り替え考えたところ、おそらく解決することができました。 見慣れぬエラーが出て焦ってしまいましたが、今後は落ち着いてエラーを信頼して解決しようと思います。 また、カラムのご指摘もありがとうございます。今後参考にいただきます。重ねてお礼申し上げます。
siruku6

2021/03/16 13:23

上手くいきそうとのことでよかったです! もし解決出来たら、解決方法を記載して解決済みにしておきましょう。
guest

回答1

0

自己解決

Users#favoritesにおいてfavoriteのレコードを呼び出していたため
@fav_recipes = @user.fav_recipes.order('created_at DESC').page(params[:page])
としてお気に入りしたレシピを呼び出した。

追記修正の依頼にて示唆を与えてくださったsiruku6さん、本当にありがとうございました。

投稿2021/03/16 13:33

lion220

総合スコア1

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問