投稿へのコメントを投稿のshowページへ遷移せずに、表示させたい。
前提・実現したいこと
投稿へのコメントを投稿のshowページへ遷移せずに、表示させたい。
発生している問題・エラーメッセージ
ホーム画面(Page#index)のフィード(自分の投稿とフォローしている人の投稿)から、
それぞれの投稿(@micropost)のidをPage#index内で取得できないです。
【page_controller.rb】
class PageController < ApplicationController
def index
@micropost = current_user.microposts.build
@feed_items = current_user.feed.paginate(page: params[:page])
@micropost = Micropost.find(params[:id])★エラーでます。
@micropost = Micropost.includes(:user).find(params[:id])★エラーでます。
@comments = @micropost.comments.includes(:user).all
@comment = @micropost.comments.build(user_id: current_user.id) if current_user
・
・
end
【エラー内容】
ActiveRecord::RecordNotFound in PageController#index
Couldn't find Micropost without an ID
@micropost = Micropost.find(params[:id])
@micropost = Micropost.includes(:user).find(params[:id])
該当のソースコード
【index.html.erb】
<!-- タイムライン -->
<h3>Micropost Feed</h3>
<%= render 'shared/feed' %> →_micropost.html.erbを呼び出します。
【_micropost.html.erb】
<li id="micropost-<%= micropost.id %>">
・
・
・
<dd>
<!-- コメント -->
<div>
<%= render 'comments/array' %> ←@commentを表示するパーシャルです。
<%= render 'calls/array' %>
<%= render 'says/array' %>
<%= render 'insists/array' %>
</div>
</dd>
</dl>
・
・
・
</li>
【calls/_array.html.erb】
<% @comments. each do |comment| %>
<div>
<strong><%= user_name(comment, @user) %></strong>
</br>
<p><%= body(comment) %></p>
<% if user_signed_in? && comment.user == current_user %>
<p><%= link_to 'Delete', comment_path(comment), method: :delete %></p>
<% end %>
</div>
<% end %>
補足情報(言語/FW/ツール等のバージョンなど)
・アコーディオンメニューは各投稿に設定してあり、
各投稿にコメントを投稿し、投稿を表示させたいです。
現状、コメントの投稿はできています。(データベース確認済み)
しかし、コメントの表示ができません。
おそらく、@micropostを正しくpage#indexに置いていないため、@micropostに紐づいた@commentを表示できない、ということだと思います(*´Д`)
追加
【試したコード】
●page#index
@microposts = current_user.feed.includes(:comments)
●user.rb←自分と自分がフォローしているユーザーの投稿を取得する。(モデルを分けてますのでコードが多くなりました。)
def feed
following_ids = "SELECT followed_id FROM relationships WHERE follower_id = :user_id"
associate_shops_ids = "SELECT shop_id FROM associates WHERE user_id = :user_id"
evaluate_microposts_ids = "SELECT micropost_id FROM evaluates WHERE user_id = (#{following_ids})"
praise_microposts_ids = "SELECT micropost_id FROM praises WHERE user_id = (#{following_ids})"
Micropost.where("user_id IN (#{following_ids}) OR shop_id IN (#{associate_shops_ids}) OR id IN (#{evaluate_microposts_ids})
OR id IN (#{praise_microposts_ids}) OR user_id = :user_id", user_id: id)
end
●index.html.erb
<%= render partial: 'microposts/micropost', collection: @microposts %>
●_micropost.html.erb
<%= render partial: 'comments/array', collection: micropost.comments %>
●comments/_array.html.erb
<%= comment.id %>
【エラー内容】
undefined local variable or method `comment' for #<#<Class:0x007fed87643850>:0x007fed875ce6e0>
マルチポスト http://qa.atmarkit.co.jp/q/10092 と
https://teratail.com/questions/55375