我有一个带有布尔属性'status'的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 %>
我在附近吗?
答案 0 :(得分: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 %>
答案 1 :(得分:0)
这将仅在具有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