更新的代码:
我需要使用此代码列出一个列表
<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>
我的输出似乎卡在循环中的一个项目上,然后每个项目都紧随其后。如何让循环中的输出(如下(显示在表中 ">
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 ">]
没有任何东西被"卡住",你的循环工作正常,但你正在输出.each
调用的结果,这是传递给.each
的集合,因为你已经用<%=
而不是<%
包装了它。
您需要在 Ruby 代码周围使用<% %>
进行循环,并且仅在要将结果输出到浏览器的行上使用<%=
。
您的循环应以
<% TodoItem.where(... %>
不
<%= TodoItem.where(... %>
第二个问题,也是你看到同一个TodoItem的描述被打印多次的原因,是你忽略了循环.each
提供的变量,而是在每个循环中查询数据库以查找相同的TodoItem。
循环的内容应如下所示:
<li class="list-group-item">
<%= link_to todoitem.description, todoitem %>
</li>
每个迭代都已有一个可用的todoitem
,无需在每个循环中查询数据库以获取新TodoItem
。
此外,您使用的查询不正确,只是纯粹巧合地发生了。您正在通过任何@todo_list.id
查询TodoItem
。
你以前有的那条线...
<%= TodoItem.find(@todo_list.id).description %>
使用@todo_list.id
作为TodoItem
的 ID。这将找到一个不相关的TodoItem
,该恰好与TodoList
共享一个数字 ID。您每次都查询相同(错误(TodoItem
记录,因为@todo_list.id
循环内没有更改。