Web + Life Hack

〜True But Useless〜

【rails】今日考えさせられたif文のこと

今日は改めてデータの持ち方について考えさせられたロジックがありました。

仕様としては

ある期限が現在より過去日であった場合、文言を非表示にする。

それ以外であれば文言を表示するという単純ものです。

その仕様に対し、私は最初、こんなロジックを書きました。

<%  

if @g08m11.present? &&
(@g08m11.end_date.blank? || @g08m11.end_date >= DateTime.now.to_date)

%>

g08m11を表示してください。

<% end %>

このロジックの何が問題かというと、
「コードの読まれ方を意識していない。」という問題です。

このコードだとend_dateがnullであった場合、
「@g08m11.end_date >= DateTime.now.to_date」
も読まれてしまい、エラーとなります。


その為、以下の内容に修正しました。

<%  

if (@g08m11.present? && @g08m11.end_date.blank?) ||
(@g08m11.present? && @g08m11.end_date && @g08m11.end_date >= DateTime.now.to_date)

%>

g08m11を表示してください。

<% end %>


まず比較対象のカラムがnull可のカラムかどうかを見る、
正常値、異常値、nullに対して
ロジックが正しい挙動であるかテストをしっかり行うクセを付けていきたいです。

また明らかにview側に書くには長過ぎるロジックで、
フロントを書く人にとっては負担でしかないので、
リファクタ対応をしていきます。