Ruby 代码卡在输出循环中



更新的代码:

我需要使用此代码列出一个列表

<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循环内没有更改。

最新更新