【问题标题】:Rails render not working as expectedRails 渲染无法按预期工作
【发布时间】:2014-07-15 12:41:56
【问题描述】:

在票证上执行显示操作,以提取票证上的 cmets 列表。我的目标是显示票证 cmets 列表,然后在其上方为某人提供添加 cmets 的选项。

这在表单位于 cmets 列表下方时有效,但是当我将其放在 cmets 上方时,我在 cmets 的呈现中收到错误消息,指出该记录没有用户 ID。几乎就像我的票控制器中的 @cmets 以某种方式从表单中添加了这个新东西,即使它是在表单呈现之前实例化的。

这是我的部分和控制器。第一次显示表单时的错误是“无法找到user_id = 0”,这是由于cmets.commenter,它查找提交评论的人的姓名。

票务控制器

def show
  @ticket = Ticket.find(params[:id])
  @comments = @ticket.comments
end

tickets/show - 表格在这里出现了两次,但我在尝试让它工作时只放了一次。我希望它在头把交椅上工作。

<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, 

cmets/表格

<%= 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 %>

cmets/评论

<li>
  <div class="comments">
    <span class="user-info"> User: <%= comment.commenter %> </span>
    <p>
      <strong>Comment:</strong>
      PUBLIC: <%= comment.try(:content) %>
    </p>
   </div>
</li>

【问题讨论】:

  • 您是否收到任何错误消息?
  • ActiveRecord::RecordNotFound at /tickets/6 找不到 'id'=0 的用户
  • 错误出现在 cmets/comment 视图的第 3 行,它调用了评论者。因为这是由票证构建的,所以它还没有与之关联的用户 ID。我想我可以用一个用户 ID 来初始化它,但我想了解它与我的预期不同的根本原因。

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


【解决方案1】:

您是否将评论 user_id 的默认设置为 0?正在发生的事情是表单正在对工单建立新的评论。所以我认为除了票已经拥有的东西之外,它还会在部分集合中呈现。在 user_id 设置为零的情况下,comment.commenter 尝试执行 where id = 0,然后就崩溃了。

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

@comments 可能是延迟加载的,这就是为什么_comment 部分可以生效。 @comments 在您进行第二次渲染之前不会被调用。为避免这种情况,您可以将控制器中的@comments 切换为:

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

希望这是有道理的。让我知道默认情况是否如此。这只是一种预感:)

【讨论】:

  • 这是正确的,非常感谢您对错误的洞察力。已在 user_id 上将数据库中的默认值设置为 0。在强制将 cmets 加载到控制器中之后,它按照我的预期工作。以防其他人在多态关系上遇到这种情况。 cmets 是多态的,可以评论并且有commentable_id。所以控制器分配是@cmets = Comment.where(commentable_id: @ticket.id)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-20
相关资源
最近更新 更多