渲染模型将渲染一个空对象

问题描述

<head>
   <title><%[email protected]%></title>
</head>
<div class="row">
   <div class="col"></div>
   <div class="col-6">
      <h1 class="d-flex justify-content-center"><%= @article.title %></h1>
      <p><%= @article.text %></p>
      <div class= "d-flex justify-content-center">
         <%= render 'comments/form'%>
      </div>
   </div>
   <div class="col">
      <%= render  @article.comments %>
   </div>
</div>
<div class="card">
   <div class="card-header"><%= if(!comment.nil?) then comment.commenter end %></div>
   <div class="card-body"><%= if(!comment.nil?) then  comment.body end %></div>
</div>

这总是渲染一个额外的空卡(或者我在那里使用的任何东西都空了),我也不知道为什么。如果我没有在引导程序的最右边一列中但在中间没有它,它就不会那样做?我不知道这里出了什么问题,大概两个小时后,这是我的最后选择。

编辑:问题出在渲染形式中,我在其中有comment.build,它显然在RAM中创建了一个空对象以由rails渲染。我将其更改为: <%= form_with model: [@article,Comment],local:true do |form| %>

解决方法

不确定是不是您要的内容,但是卡片div始终会显示您是否有评论,如果不存在,则会创建一个空卡片。

更改此:

<div class="card">
  <div class="card-header"><%= if(!comment.nil?) then comment.commenter end %></div>
  <div class="card-body"><%= if(!comment.nil?) then  comment.body end %></div>
</div>

对此:

<% if (!comment.nil?) %>
<div class="card">
  <div class="card-header"><%= comment.commenter %></div>
  <div class="card-body"><%= comment.body %></div>
</div>
<% end %>

然后,只有当comment存在时,卡片div才会生成,并删除该空卡片。