文字列からリンクで開いて次のページへ進むというのが必要な場面で文字列が空のためリンクがクリックできず、意図した動作ができないというバグがあった。 実装をそのまま修正すると、
if name.present?
link_to name, some_path(object)
else
link_to another_name, some_path(object)
end
てなかんじで、起きたバグに対処するように直す。
でも、自分で開発しているときはこういうのは不安があって、そもそも name が空文字や nil だというのも自分が想定してなかったからバグが出ている。 どうせ修正をするなら、ここでけして同じ種類の問題が起きないように直したい。
ということで、こんな風に直す。
name_candidates = [name, another_name, 'fallback name']
visible_name = name_candidates.find {|n| n.to_s.length > 0 }
link_to visible_name, some_path(object)
ここでの問題は実装上は present?
かどうかというものだったけれど、意味上は空文字列だと表示がされずリンクが有効に働かないということ。なので、その問題を解消するようなコードにしておく。
これで、絶対に同種の問題は起きない修正になったと安心できる。
「fallback name
となってしまうケースがそのまま表示され次に進めていいのか」というのはまた別の問題としてあって、それをケアするのならまた別のそれに適した場所で対応をしてやるといい。
細かい話ではあるんだけど、わりと「実装上のつじつまはあってる」というコードで push されているコードをよくみるので書いてみた。