30567


### 前提・実現したいこと

投稿へのコメントを投稿のshowページへ遷移せずに、表示させたい。

【理想図】  
[![画像の説明をここに入力](https://i.stack.imgur.com/2hEgP.png)](https://i.stack.imgur.com/2hEgP.png)

【現状図】  
[![画像の説明をここに入力](https://teratail.storage.googleapis.com/uploads/contributed_images/6a6b05e038ef105aee0d8ce80145f94e.png)](https://teratail.storage.googleapis.com/uploads/contributed_images/6a6b05e038ef105aee0d8ce80145f94e.png)

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

ホーム画面(Page#index)のフィード(自分の投稿とフォローしている人の投稿)から、  
それぞれの投稿(@micropost)のidをPage#index内で取得できないです。

【page_controller.rb】

[code]

    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
    
[/code]

【エラー内容】

[code]

    ActiveRecord::RecordNotFound in PageController#index
    Couldn't find Micropost without an ID
    
    
    
    
    @micropost = Micropost.find(params[:id])
    @micropost = Micropost.includes(:user).find(params[:id])
    
[/code]

### 該当のソースコード

【index.html.erb】

[code]

    <!-- タイムライン -->
    <h3>Micropost Feed</h3>
    <%= render 'shared/feed' %> →_micropost.html.erbを呼び出します。
    
[/code]

【_micropost.html.erb】

[code]

    <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 %>
    
[/code]

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

・アコーディオンメニューは各投稿に設定してあり、  
各投稿にコメントを投稿し、投稿を表示させたいです。  
現状、コメントの投稿はできています。(データベース確認済み)  
しかし、コメントの表示ができません。  
おそらく、@micropostを正しくpage#indexに置いていないため、@micropostに紐づいた@commentを表示できない、ということだと思います(*´Д｀)

### 追加

【試したコード】

●page#index

[code]

    @microposts = current_user.feed.includes(:comments)
    
[/code]

●user.rb←自分と自分がフォローしているユーザーの投稿を取得する。(モデルを分けてますのでコードが多くなりました。)

[code]

      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
    
[/code]

●index.html.erb

[code]

    <%= render partial: 'microposts/micropost', collection: @microposts %>
    
[/code]

●_micropost.html.erb

[code]

    <%= render partial: 'comments/array', collection: micropost.comments %>
    
[/code]

●comments/_array.html.erb

[code]

    <%= comment.id %>
    
[/code]

【エラー内容】

[code]

    undefined local variable or method `comment' for #<#<Class:0x007fed87643850>:0x007fed875ce6e0>
    
[/code]

マルチポスト <http://qa.atmarkit.co.jp/q/10092> と  
<https://teratail.com/questions/55375>


CC BY-SA 3.0
2016-11-16T04:25:33.263
30441
2016-11-21T04:49:23.077
2016-11-18T15:23:06.053
19459
19459
question
ruby-on-rails jquery rails-activerecord facebook
投稿へのコメントを投稿のshowページへ遷移せずに、表示させたい。


なんかいろいろ `build` してますけど、

  * `User has_many :microposts`
  * `Micropost has_many :comments`

の既存データを表示するのなら以下のような感じでよいのでは?

pages_controller.rb

[code]

    def index
      @microposts = current_user.microposts.includes(:comments)
    end
    
[/code]

index.html.erb

[code]

    <%= render partial: 'micropost', collection: @microposts %>
    
[/code]

_micropost.html.erb

[code]

    <%= micropost.id %>
    <%= render partial: 'comment', collection: micropost.comments %>
    
[/code]

_comment.html.erb

[code]

    <%= comment.id %>
    
[/code]


CC BY-SA 3.0
2016-11-17T13:38:37.387
30485
2016-11-17T13:38:37.387
17037
30441
answer


データから直接持ってくる場合

[code]

    def comment_feed(micropost)
      comments = micropost.comments #その投稿のidに紐づくcommentを全て取得します。
      # commentを1つずつ取り出し、bodyの内容でpタグを出力する
      comments.map do |comment|
        content_tag(:p, comment.body)
      end
    end
    
[/code]

teratailで解答をいただきました。  
<https://teratail.com/questions/55698>


CC BY-SA 3.0
2016-11-21T04:49:23.077
30567
2016-11-21T04:49:23.077
19459
30441
answer