Ruby代码卡在输出循环中

时间:2018-06-15 15:40:04

标签: ruby loops output erb

更新的代码:

我需要一个带有此代码的列表

<div class="card mt-4">
  <ul class="list-group list-group-flush">
  <%= TodoItem.where(todo_list_id: @todo_list.id).each do |todoitem|%> 
    <li class="list-group-item">
        <a href = "/todo_items/<%=@todo_list.id %>"> 
          <%= TodoItem.find(@todo_list.id).description %>
        </a>
    </li>
  <% end %>
</ul>
<dl>

我的输出似乎停留在循环中的一个项目上然后每个人都来了。如何获得循环中的输出(如下所示) &#34;

Call 1871 tomorrow
Call 1871 tomorrow
[#<TodoItem id: 2, todo_list_id: 2, created_at: "2018-06-15 00:27:52", updated_at: "2018-06-15 03:50:26", description: "Call 1871 tomorrow">, #<TodoItem id: 3, todo_list_id: 2, created_at: "2018-06-15 04:00:26", updated_at: "2018-06-15 04:00:26", description: "When to move ">]

1 个答案:

答案 0 :(得分:1)

什么都没有&#34;卡住了#34;,你的循环工作正常,但你输出.each调用的结果,这是传递到.each的集合,因为您已将其包裹在<%=而不是<%

您需要在循环的Ruby代码周围使用<% %>,并且只在要将结果输出到浏览器的行上使用<%=

你的循环应该以

开头
<% TodoItem.where(... %>

<%= TodoItem.where(... %>

第二个问题,以及您多次看到同一个TodoItem描述的原因,是您忽略了循环提供的变量.each,而是查询每个循环的相同TodoItem的数据库。

您的循环内容应如下所示:

<li class="list-group-item">
  <%= link_to todoitem.description, todoitem %>
</li>

每次迭代已经一个todoitem可用,您不需要在数据库中查询每个循环的新TodoItem

此外,您使用的查询不正确,并且只在纯粹巧合的所有工作中发生。您正在通过TodoItem查询@todo_list.id

你之前拥有的那条线......

<%= TodoItem.find(@todo_list.id).description %>

使用@todo_list.id作为TodoItem的ID。发现发生的无关TodoItemTodoList共享数字ID。您每次都要查询相同的(错误的)TodoItem记录,因为@todo_list.id在您的循环中不会发生变化。