やりたいこと
「List>Card>Log」のグループを日付ごとに並べたい
・ListごとにTodoを並べられるアプリケーションを作っています
・作成したデータが日付ごとに区切られて表示する、表示方法を考えています
・新しいもの順に並べるのはできそうだが、日付でグループが分かれる形で表示する方法がよくわかっていないです
・SQLのgroup_byを使ってやるのかなと思っているのですが・・・?
↓
質問
以下のようなアドバイスをもらっているのですが、内容を理解できず全然見通しがたってないです。。。
(あんまり何度も聞ける相手ではないのでこちらに投稿してます)
この内容でやる場合は「学んだ方が良さそう内容」や「もう少し詳しい実装方針」のアドバイスいただけると嬉しいです。
他のやり方でも構いません!
リストのループの先頭で日付を変数に入れて、変数の日付とリストの日付をifで比較して、異なった場合に表示を切り替えるという処理にすればいけそうな気がする
before_date = '' @list.each do |list| # ループ1回転目のみ必ず日付を入れる before_date = list.date if before_date.blank? # 前回日付と自身の日付を比較 if before_date == list.date # 日付の切り替わりがなかった時の処理 else # 日付が切り替わった時の処理 end # 自身の日付を前回日付として格納 before_date = list.date end
github:コードを載せておきます
ここに現在のものすべて載ってます↓
https://github.com/takuming/focus
現在のView側のコード
スクショのものを表示している、View部分のコードを貼っておきます
erb
1<div class="topPage"> 2 <div class="listWrapper"> 3 <% @list.each do |list| %> 4 <div class="list"> 5 <div class="list_header"> 6 <h2 class="list_header_title"> 7 <%= list.title %> 8 </h2> 9 <div class="list_header_action"> 10 <%= link_to content_tag(:i, '削除', class: 'fas fa-trash'), list, method: :delete, data: { confirm: "#{list.title}を削除して大丈夫ですか?" } %> 11 <%= link_to(content_tag(:i, '編集', class: 'fas fa-pen'), edit_list_path(list)) %> 12 </div> 13 </div> 14 15 <div class="cardWrapper"> 16 <% list.cards.each do |card|%> 17 <div class="card"> 18 <div class="head"> 19 <h3 class="card_title"> 20 <%= card.title %> 21 </h3> 22 <li class="btn_start"> 23 <%= form_tag("/cards/#{card.id}/log/start_time") do %> 24 <input type="hidden" name="card_id"> 25 <input type="submit" value="スタート" class="btn_small"> 26 <% end %> 27 </li> 28 <li class="btn_start"> 29 <%= form_tag("/cards/#{card.id}/log/end_time") do %> 30 <input type="hidden" name="card_id"> 31 <input type="submit" value="ストップ" class="btn_small"> 32 <% end %> 33 </li> 34 </div> 35 36 <div class="section_log"> 37 <% card.logs.each do |log|%> 38 <div class='time_log'> 39 <% @t1 = log.created_at.strftime("%H:%M:%S") %> 40 <% @t2 = log.end_time %> 41 <p>計測 → </p><p>開始: <%= @t1 %></p><span>-</span><p>終了: <%= @t2 %></p> 42 <% if @t1.present? && @t2.present? && %> 43 <p>合計: <%= log.total_time%> </p> 44 <% else %> 45 <p>何もないよ</p> 46 <% end %> 47 </div> 48 <%end%> 49 </div> 50 51 <div class="cardContents_btnArea"> 52 <%= link_to '編集する', edit_list_card_path(card.list, card), class: "edit_btn" %> 53 <%= link_to '削除をする', list_card_path(card.list, card), class: "text-danger delete_btn", method: :delete, data: { confirm: "このカードを削除して大丈夫ですか?" } %> 54 </div> 55 </div> 56 <%end%> 57 58 <div class="addCard"> 59 <i class="far fa-plus-square"></i> 60 <%= link_to "さらにカードを追加", new_list_card_path(list), class: "addCard_link" %> 61 </div> 62 </div> 63 64 </div> 65 <% end %> 66 </div> 67</div> 68