Rails渲染不按预期工作

时间:2014-07-15 12:41:57

标签: ruby-on-rails forms model-view-controller ruby-on-rails-4

对票证进行展示操作,该票证会提取票证上的评论列表。我的目标是显示故障单注释列表,然后在上面给出了添加注释的选项。

当表单位于注释列表下方时,这种方式有效,但是当我将上面的注释放在上面时,我在注释的呈现中收到错误,指出该记录没有用户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>

1 个答案:

答案 0 :(得分:1)

注释user_id上的默认设置为0吗?正在发生的事情是表单正在建立对票证的新评论。所以我认为除了票已经有的东西之外,它还会在集合中呈现。将user_id设置为零后,comment.commenter会尝试执行id = 0的位置,然后它就会爆炸。

因此,如果您确实在该列上有默认值,请将其删除。外键应默认为nil。

@comments可能是延迟加载的,这就是_comment部分可以实现的原因。在您进行第二次渲染之前,未调用@comments。为避免这种情况,您可以将控制器中的@comments切换为:

@comments = Comment.where(ticket_id: params[:id])

希望这是有道理的。如果是默认情况,请告诉我。这只是一种预感:)