对票证进行展示操作,该票证会提取票证上的评论列表。我的目标是显示故障单注释列表,然后在上面给出了添加注释的选项。
当表单位于注释列表下方时,这种方式有效,但是当我将上面的注释放在上面时,我在注释的呈现中收到错误,指出该记录没有用户ID。几乎就像我的票证控制器中的@comments以某种方式从表单中添加这个新东西,即使它在表单渲染之前被实例化。
这是我的部分和控制器。首先显示表单时的错误是“无法找到user_id = 0”这是由于comments.commenter,它查找提交评论的人的姓名。
票务控制器
def show
@ticket = Ticket.find(params[:id])
@comments = @ticket.comments
end
门票/节目 - 表格在这里两次,但我只是在试图让它工作时把它放在一次。我希望它能在最佳位置上工作。
<div class="widget-content nopadding">
<ul class="new-comment">
<%= render "comments/form" %> --- Does not work here
</ul>
<ul class="recent-comments">
<%= render @comments %>
</ul>
</div>
<%= render "comments/form" %> --- Works here,
评论/形式
<%= form_for([@ticket, @ticket.comments.build]) do |f| %>
<div class="field">
<%= f.label :content %><br>
<%= f.text_area :content %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
评论/注释
<li>
<div class="comments">
<span class="user-info"> User: <%= comment.commenter %> </span>
<p>
<strong>Comment:</strong>
PUBLIC: <%= comment.try(:content) %>
</p>
</div>
</li>
答案 0 :(得分:1)
注释user_id上的默认设置为0吗?正在发生的事情是表单正在建立对票证的新评论。所以我认为除了票已经有的东西之外,它还会在集合中呈现。将user_id设置为零后,comment.commenter
会尝试执行id = 0的位置,然后它就会爆炸。
因此,如果您确实在该列上有默认值,请将其删除。外键应默认为nil。
@comments
可能是延迟加载的,这就是_comment
部分可以实现的原因。在您进行第二次渲染之前,未调用@comments
。为避免这种情况,您可以将控制器中的@comments
切换为:
@comments = Comment.where(ticket_id: params[:id])
希望这是有道理的。如果是默认情况,请告诉我。这只是一种预感:)