如何显示在主题中发表评论的每个用户

时间:2015-03-20 08:56:44

标签: ruby-on-rails

我试图展示在主题中发表评论的每个用户的头像。我几乎有一个主题模型和一个评论模型。在我的索引页面中,我有一个创建的所有主题的列表和评论的用户的头像列表,但它只获取第一个主题的列表,并重复图像。

这就是我在索引中所拥有的内容,但最终我会通过重复的图像获取每个评论的头像。

   <tbody>
        <% @topics.each do |topic| %>
            <th class="topic"> <%= link_to topic.title, topic %> </th>
            <th class="category"><%= topic.category.title %></th>
            <th class="users"><%= image_tag topic.user.avatar.url(:thumb)%></th>
            <th class="replies"><%= topic.comments.count %> </th>
            <th class="replies"></th>
            <th class="activities"></th>
            <% @comment.each do |comment| %>
                <%= image_tag comment.user.avatar.url(:thumb)  %>
            <% end %>
        <% end %>
    </tbody>

我的评论控制器

class CommentsController < ApplicationController

def index
    @topics = Topic.all
    @comments = Comment.includes(:user)
end

def create
    @comment = @commentable.comments.new(comment_params)
    @comment.user_id = current_user.id 
    @comment.save
    redirect_to @commentable
end


private

    def comment_params
        params.require(:comment).permit(:body)
    end
end

1 个答案:

答案 0 :(得分:2)

您只显示一条评论的用户。

<% @comment.each do |comment| %>

您可能需要获取该主题的所有评论。见下文。

<% topic.comments.each do |comment| %>

要避免N+1问题,您也可以急切加载评论

def index
  @topics = Topic.includes(:comments => :user)
end

要显示唯一身份用户,您可以将Array#uniq与块一起使用。 假设注释表具有user_id,作为外键,

<% topic.comments.uniq(&:user_id).each do |comment| %>