Kintarou'sBlog

プログラミング学習中。学習内容のアウトプットや読書で学んだことなど随時投稿!

【Ruby】同じ年月日の先頭のレコードにのみ日付ボーダーを実装する

こんにちは😊Kintarouです。

現在エンジニア転職を目指してTECH CAMPにてプログラミング学習中です👨‍🎓
夢はフリーランスエンジニアになって働く人が働きやすいシステムを作ること!
と、愛する妻と海外移住すること🗽

プログラミングや読んでいる本のことなど、ブログに書いていきます!
twitter : https://twitter.com/ryosuke_angry


今日は、昨日実装した日付ボーダーについてまとめます!

内容的に「アイテムの種類毎に1つの要素だけ処理を行う」というものになるので、何かしら応用が出来そうな気もしております😊

実装要件

f:id:ryosuke-toyama:20200930124150p:plain
今回はtasksテーブルから取り出した各レコードを実行順に表示させ、日付が変わる毎に日付ボーダーを表示させる実装を行いました。
日付ボーダーの作成方法は過去記事でまとめております。
ryosuke-toyama.hatenablog.com

①tasksテーブルから取り出したレコードをeachメソッドでビューに表示。
②各レコードの実行日時を取得し、task要素の上に対応する日付ボーダーのdiv要素を表示。
③同じ年月日のレコードがある場合、先頭のレコードにのみ日付ボーダーを表示する。

実装コード

#省略

<% border_day = []%>                          #①
<% @tasks.each do |task| %>
  <% unless border_day.include?(task.runtime.strftime("%Y%-m%d"))%>   #②
    <% border_day << task.runtime.strftime("%Y%-m%d")%>        #③

#日付ボーダーのdiv要素

  <% end %>

#省略

<% end %>

①仮置きの空配列(border_day)を用意します。
②strftimeメソッドで年月日を連結した文字列を作成し、border_dayに含まれていない場合、③以降の処理を行います。
③border_dayに年月日の文字列を格納します。

unlessにて、含まれていない場合に日付ボーダーを表示するdiv要素が読み込まれるので、既に含まれている場合は③以降の処理はされません。(=日付ボーダーが表示されない)

感想

レコードにハッシュのような形で格納されている中のdatetimeカラムの内、年月日時分秒まである中の”年月日”のみを判定材料としてレコード振り分ける。
最初は上記のように考えていたのでかなりややこしかったですが、strftimeメソッドで文字列として抽出して変換できたので助かりました。
今回は、クラスに備わっているメソッドやrubyにもとから定義されているメソッドをもっと勉強することによって、実現したいことに近づけるのではと思う実装でした😊

以上、どなたかの参考になれば幸いです😊