要約
messages.first.title
とかやるとコケるので、ちゃんとこういうことを考慮した作りにして欲しい。
遭遇した事象
Railsのview上に以下のようなコードがあった
<div class="title"> <div id="notifce_message">『<%= @messages.first.title %>』が最初のメッセージタイトルです</div> </div>
複数あるメッセージの中で最初のメッセージが届いている旨のコードである。だがこの @messsages
が 0件の場合は @messages.first
の結果が nil
になるため nil.title
しようとしてエラーになる。
回避の考え方
回避の考え方とはとしては2つある
nilにならないようにする
無理やりfirstでとってきてメソッドチェインで解決しようとするからまずいので、ちゃんとそれように変数に詰めるなり、メソッドを用意してあげる。
今回の例の場合はdecorator系のメソッドを用意してあげれば解決する。
def first_message_title return "" if @messages.first.nil? @messages.frist.title end
<div class="title"> <div id="notifce_message">『<%= first_message_title %>』が最初のメッセージタイトルです。</div> </div>
nilでも大丈夫なようにする
messageは1件以上入ることが絶対で、メソッドをつくるほどでもない場合はボッチ演算子で回避することもできる。ただしこれは使い方によってエラーを正しく認識出来ない場合があるのでケースバイケース
<div class="title"> <div id="notifce_message">『<%= @messages.first&.title %>』が最初のメッセージタイトルです</div> </div>