Ruby on rails Rails渲染未按预期工作

Ruby on rails Rails渲染未按预期工作,ruby-on-rails,forms,model-view-controller,ruby-on-rails-4,Ruby On Rails,Forms,Model View Controller,Ruby On Rails 4,在票证上有一个表演动作,可以在票证上拉入一个评论列表。我的目标是显示票证评论列表,然后在上面为某人提供添加评论的选项 当表单位于注释列表下方时,此操作有效,但是当我将表单放在注释列表上方时,我在注释的呈现中得到一个错误,说该记录没有用户id。几乎就像我的票证控制器中的@comments一样,它以某种方式从表单中添加了这个新东西,即使它是在表单呈现之前实例化的 这是我的部分和控制器。首先显示表单时出现的错误是“找不到用户_id=0”,这是由于comments.commenter导致的,它查找提交注

在票证上有一个表演动作,可以在票证上拉入一个评论列表。我的目标是显示票证评论列表,然后在上面为某人提供添加评论的选项

当表单位于注释列表下方时,此操作有效,但是当我将表单放在注释列表上方时,我在注释的呈现中得到一个错误,说该记录没有用户id。几乎就像我的票证控制器中的@comments一样,它以某种方式从表单中添加了这个新东西,即使它是在表单呈现之前实例化的

这是我的部分和控制器。首先显示表单时出现的错误是“找不到用户_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>
  • 用户: 评论: 公众:


  • 您是否将注释用户id的默认值设置为0?现在的情况是表单正在罚单上创建新的注释。因此,我认为,除了票证已经拥有的内容外,在集合中还呈现了部分内容。当user_id设置为零时,
    comment.commenter
    尝试执行where id=0的操作,它就会爆炸

    因此,如果该列上有默认值,请将其删除。外键应默认为零

    @comments
    可能是延迟加载的,这就是为什么
    \u comments
    部分可以生效的原因<代码>@comments在您进行第二次渲染之前未被调用。为了避免这种情况,您可以将控制器中的
    @注释
    切换到:

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

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

    您是否收到任何错误消息?ActiveRecord::RecordNotFound at/tickets/6找不到“id”=0的用户错误出现在comments/comment视图的第3行,它在该行调用commenter。因为这是由票证生成的,所以它还没有与之关联的用户id。我想我可以用一个用户ID来初始化它,但我想知道它偏离我预期的基本原因。这是正确的,非常感谢您对错误的了解。已将数据库中用户id的默认值设置为0。在强制将注释加载到控制器中后,其工作方式符合我的预期。以防其他人在多态关系中遇到这种情况。注释是多态的,可以注释,并且具有可注释的\u id。因此控制器分配为@comments=Comment.where(commentable\u id:@ticket.id)