博客评论显示异常:单篇评论出现在所有博客页面的问题求助
问题解决:博客评论仅显示在对应文章页面
问题描述
尝试为单篇博客添加评论,期望评论仅出现在该博客的详情页,但实际所有博客页面都会显示所有评论。
错误原因分析
1. Blog控制器show方法冗余代码
在show方法中,你额外定义了@blogs = Blog.all,这会把所有博客数据传递到详情页,导致视图错误遍历所有博客。
2. 视图遍历所有博客评论
在show.html.erb中,你遍历了@blogs所有博客并显示每个博客的评论,这就会把所有博客的评论都渲染出来,而非当前打开的博客的评论。
修正方案
1. 修改Blog控制器的show方法
移除多余的@blogs = Blog.all,只保留当前博客和新建评论的实例:
def show @blog = Blog.find(params[:id]) @comment = @blog.comments.build end
2. 修改views/blogs/show.html.erb代码
直接使用当前博客@blog的评论集合,无需遍历所有博客:
<div class="comment-box"> <% @blog.comments.each do |c| %> <p><%= c.body %></p> <% end %> </div> <!-- 若有评论提交表单,保留如下结构即可 --> <%= form_with(model: [@blog, @comment]) do |form| %> <%= form.text_area :body %> <%= form.submit '提交评论' %> <% end %>
额外优化:Comments控制器的show方法(可选)
原show方法逻辑错误,若不需要单独的评论详情页,可直接删除该方法;若需要,应修改为获取指定评论:
def show @comment = Comment.find(params[:id]) end
内容的提问来源于stack exchange,提问作者sperrin98
相关产品推荐
相关产品推荐

