0

ブール属性「status」を持つproject_todoモデルがあります。ステータスがfalseのプロジェクトのToDoのみを一覧表示するループをインデックスページに表示するにはどうすればよいですか?

すべてのプロジェクトのタスクを一覧表示する通常のループは次のようになります。

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

そして、私はこれを行うことによってステータスがfalseの場合にのみtodosを表示するループで遊んでいました:

<% @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

status == falseこれは、 :を持つproject_todosでのみループします。

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

または、より良い解決策project_todos:次のことを実行して、ActiveRecordにそれ自体をフィルタリングさせることができます:

<% @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 に答える