Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
@kmjooh
Revisions
Report this question
Subscribe question
Help us understand the problem. What is going on with this question?
Q&A
Closed

【rails5】パーシャルが表示されません。解決方法を教えてください。

解決したいこと

レシピサイトを作成しておりまして、ユーザーページにそのユーザーが投稿したレシピを一覧表示させたいです。
レシピ一覧表示のビューはパーシャルで別ファイルに作成しておりますが、それが表示されないので、解決方法を教えてください。
初歩的なミスかもしれませんが、色々と試してみましたが上手くいきませんでしたので、ご教示お願いします。

Image from Gyazo

今回該当するUserとRecipeテーブルのカラムは以下になります。
Image from Gyazo

該当するソースコード

users/show.html.erb
  <ul class="nav nav-tabs nav-justified my-3">
    <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_recipes %></span></a></li>
    <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>
    <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>
    <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>
  </ul>

  <%= render 'recipes', recipes: @recipes %>
</div>

このshow.html.erbよりrenderして以下の_recipes.html.erbに飛ぶはずなのですが、表示されません。

users/_recipes.html.erb
<% if recipes.any? %>
  <ul class="list-unstyled">
    <% recipes.each do |recipe| %>
      <li>
        <%= image_tag recipe.image.url, size: "80x80" %>
        <%= recipe.title %>
      </li>
    <% end %>
  </ul>
  <%= paginate recipes %>
<% end %>

Userコントローラーは以下になります。

users_controller.rb
def show
    @user = User.find(params[:id])
    @recipes = @user.recipes.order(id: :desc).page(params[:page])
    counts(@user)
  end

宜しくお願いします。

0
3
Answer

掲示するコードは、本質的な部分に限られたほうが、
より回答を得やすいかと思います。

render の使い方が違うような気がしますが、
以下のような感じではいかがでしょうか?

show.html.erb
<%= render partial: 'recipes', locals: { recipes: @recipes } %>
_recipes.html.erb
<% recipes.each do |recipe| %>
  <%= recipe.title %>
<% end %>

ご参考になれば幸いです。

0
ありがとうございます!
投稿方法に関しましても、ご助言頂きありがとうございます。
ご指摘頂いたとおりにコードを書いてみましたが、状況変わらず表示されません。
何が原因として考えられますでしょうか?
簡潔なコードで、障碍の切り分けを行うと、原因究明しやすいかと思います。

データベースより取得したレシピは、ビューに渡せていますでしょうか?
利用者に紐付くレシピをページネーションを行って表示と書かれていますが、

def show
@recipes = Recipe.limit(5)
end

と、簡潔な形で書いて見ると良いかもしれません。
ご参考までに。
ありがとうございます。
ご指摘頂いたように原因究明してみたところ、どうやら
def show
@recipes = @user.recipes.order(id: :desc).page(params[:page])
end
の行が原因のようです。
@recipes = Recipe.allとすると全レシピですが、ちゃんと表示されます。
しかし、@recipes = @user.recipes.allだと表示されません。
UserとRecipeが紐づいていないかと思ったのですが、他ページで
@recipe.user.nameとやると、そのレシピに紐づくユーザーの名前がちゃんと表示されているので、紐づいていると思われます。
has_many: recipes, belongs_to: userも書けているのですが、何がダメなのでしょうか?
View the remaining 2 comments.

繰り返しになりますが、簡潔なコードで検証されると良いです。

紐付いているかどうか
@recipe.user.name が表示されるのであれば、recipeからuserへは紐付いているのでしょう。
そして、@recipes = @user.recipes.all が表示されないのであれば、
1) user から recipeへは紐付いていない
2) そもそもそのユーザーはレシピを持っていない
3) どこかのコードで、@recipes = nil のように上書きされているなど
様々な原因が考えられます。

rails console で、
user = User.create(name: "ichiro", id: 100)
recipe = Recipe.create(title: "omisoshiru", user_id: 100)
puts user.recipes.all
puts recipe.user.name
など、地道に検証されることをお薦めいたします。

0
user.rbでhas_many :recipesの下にお気に入り機能実装のため
has_many :recipes, through: :favorites, source: :user
としており、こちらが適応されていたため上手く表示されていなかったようです。
こちらを変更したところ表示されるようになりました。
たびたびご回答頂きありがとうございました!
無事に解決したようで、何よりです。
ソフトウェア開発の際には、ご自身の意図した動作とは違う現象が多々発生いたします。
その要因を探り、解決していくことも、
コーディングスキルと並んで重要な伎倆となります。
一歩ずつ前進なさっていってくださいませ。
ご活躍を祈っております。
View the remaining 1 comments.

_recipes.html.erbが読み込めてないのか
@recipesが読み込めてないのかの切り分けができてないので

_recipes.html.erbに無条件に表示される文字列を含めてみるといいです。

0
ありがとうございます!
上記コメントに記載させて頂きましたが、無事解決しました。
Help us understand the problem. What is going on with this answer?
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login