0

我有一个div. Tasks每一个Task都是单独的form

<div id="tasks">
    <form id="task">...(@task.date = 2013-08-25)...</form>
    <form id="task">...(@task.date = 2013-08-25)...</form>
    <form id="task">...(@task.date = 2013-08-24)...</form>
    <form id="task">...(@task.date = 2013-08-23)...</form>
    <form id="task">...(@task.date = 2013-08-23)...</form>
    <form id="task">...(@task.date = 2013-08-23)...</form>
    <form id="task">...(@task.date = 2013-08-21)...</form>
    <form id="task">...(@task.date = 2013-08-21)...</form>
</div>

我想单独包装Tasks并添加标题信息。datedivdiv

<div id="tasks">
    <div class="day_tasks">
        <div class="day_tasks_header">...</div>
        <form id="task">...(@task.date = 2013-08-25)...</form>
        <form id="task">...(@task.date = 2013-08-25)...</form>
    </div>
    <div class="day_tasks">
        <div class="day_tasks_header">...</div>
        <form id="task">...(@task.date = 2013-08-24)...</form>
    </div>
    <div class="day_tasks">
        <div class="day_tasks_header">...</div>
        <form id="task">...(@task.date = 2013-08-23)...</form>
        <form id="task">...(@task.date = 2013-08-23)...</form>
        <form id="task">...(@task.date = 2013-08-23)...</form>
    </div>
    <div class="day_tasks">
        <div class="day_tasks_header">...</div>
        <form id="task">...(@task.date = 2013-08-21)...</form>
        <form id="task">...(@task.date = 2013-08-21)...</form>
    </div>
</div>

可以使用 jQuery 在单独的 div 中添加一个date到 div 的类名和.wrapAll具有相同类的 div,然后.prepend()在这个单独的 div 的顶部添加一个带有标题信息的 div。但是我不想把这么多的视图逻辑从 rails 端放到 JS 端。

Rails 可以做到吗?

index.html.erb的很简单:

<%= content_tag(:div, id: 'tasks') do %>
    <%= render @tasks %>
<% end %>

_task.html.erb也是一个简单的<%= form_for task ... %>

4

1 回答 1

2

ruby 中有一种方法group_by,我认为可以帮助您实现这一目标。您可以按日期对任务进行分组。您需要稍微更改渲染方法,但正如您所说,它会比在 javascript 中进行更简洁。

因此,要将您的任务分组,您可以执行以下操作:

grouped_tasks = @tasks.group_by(&:date)

这将返回一个哈希值,将日期映射到具有该日期的任务,例如:

{ "2013-08-25" => [task1, task2],
  "2013-08-24" => [task3],
  "2013-08-23" => [task4, task5, task6],
  "2013-08-21" => [task7, task8] }

然后,您可以遍历分组以构建视图:

<div id="tasks">
  <% grouped_tasks.each do |date, tasks| %>
    <div class="day_tasks">
      <div class="day_tasks_header">...</div>
      <% tasks.each do |task| %>
        <%= form_for task ... %>
      <% end %>
    </div>
  <% end %>
</div>
于 2013-08-27T12:56:00.313 回答