0

我有一个带有布尔属性“状态”的 project_todo 模型。如何在索引页面上显示一个仅列出状态为 false 的项目待办事项的循环?

列出所有项目待办事项的常规循环如下所示:

<% @project.project_todos.each do |todo|%>
    <li data-id="<%= todo.id %>">
        <%= todo.title %>
    </li>
<% end %>

我正在玩一个循环,如果状态为假,则只显示待办事项:

<% @project.project_todos {status = "f"}.each do |todo|%>
    <li data-id="<%= todo.id %>">
        <%= todo.title %>
    </li>
<% end %>

我在附近吗?

4

2 回答 2

1

如果可以的话,不要在你的观点中加入太多的逻辑。在这种情况下,您可以创建一个范围ProjectTodo以根据status字段进行过滤。

class ProjectTodo < ActiveRecord::Base
  scope :inactive, where(status: false)
  #...
end

然后在你看来,你可以做

<% @project.project_todos.inactive.each do |todo|%>
    <li data-id="<%= todo.id %>">
        <%= todo.title %>
    </li>
<% end %>
于 2012-12-05T17:47:03.417 回答
0

这将仅在具有以下内容的 project_todos 上循环status == false

<% @project.project_todos.select{|project_todos| project_todos.status == false}.each do |todo|%>
    <li data-id="<%= todo.id %>">
        <%= todo.title %>
    </li>
<% end %>

或者,更好的解决方案:您可以执行以下操作,并让 ActiveRecord 过滤project_todos自身:

<% @project.project_todos.where(status: false).each do |todo|%>
    <li data-id="<%= todo.id %>">
        <%= todo.title %>
    </li>
<% end %>

在扩展中

您可以创建如下范围:

class ProjectTodo < ActiveRecord::Base
  #...
  scope :with_status, lambda{ |status| where(status: status) }
  #...
end

并像这样使用它:

@project.project_todos.with_status(status: false) # Returns the project_todos with a status == false and belonging to the @project
于 2012-12-05T17:46:19.443 回答