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