nil的未定义方法`comments':NilClass - 特定用户的列表

时间:2014-02-24 02:17:40

标签: ruby-on-rails ruby-on-rails-4

有帖子,评论&用户。我想在帖子显示页面的评论列表中发布特定用户的评论数量。我知道我需要定义@user,但我不知道如何定义它,因此它显示每个用户的特定数字。用户是评论的作者。

发布控制器

def show
  @post = Post.find(params[:id])
  @comment = Comment.new
  @comments = Post.find(params[:id]).comments.order(created_at: :desc)
  @user = ???
end

发布/显示操作 - 错误适用于 - @ user.comments.count

<div class="row">
<% @comments.each do |comment| %><br>

<div class="col-sm-4"> <%= link_to comment.user.name, user_path(comment.user) %> <br> 
<%= image_tag(comment.user.smallimage) %><%= @user.comments.count %>
</div>

<div class="col-sm-8"> <b><%= comment.title %>:</b>   
<div>
<% if comment.content.length > 250 %>
<%= truncate(comment.content, length: 250) %>
<%= link_to_function '...Read more', "$(this).parent().html('#{escape_javascript  comment.content}')" %>
<% else %>
<%= comment.content %>
<% end %>
</div>  
</div>
<% end %>
</div>

2 个答案:

答案 0 :(得分:2)

如果您定义@user,则只有一个用户或一组用户与您的评论无关。你不需要它。你可以像这样使用用户和评论之间的关系:

<%= comment.user.comments.count %>

请注意,这将为每个注释运行数据库查询,以获取该用户的总注释计数。出于性能原因,您可能希望使用counter cache代替。

答案 1 :(得分:1)

如果您在帖子模型belongs_to :user中定义了关联,那么您可以@user = @comment.user

但是,如果是这种情况,那么您可以使用@comment.user.name或类似的方式从视图中调用它。

如果你推送到GitHub,我想看看整个代码库。