更新的代码:
我需要一个带有此代码的列表
<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 ">]
答案 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。发现发生的无关TodoItem
与TodoList
共享数字ID。您每次都要查询相同的(错误的)TodoItem
记录,因为@todo_list.id
在您的循环中不会发生变化。