0

私は を持ってdivTasksます。すべて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同じものdateを別々にラップし、ヘッダー情報divを追加したい。div

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

datediv のクラス名と.wrapAll、jQuery を使用して別の div 内の同じクラスを持つdivに a を追加し.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

group_byこれを達成するのに役立つと思うRubyの方法があります。日付ごとにタスクをグループ化できます。レンダリング アプローチを少し変更する必要がありますが、おっしゃる通り、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 に答える