method_missingを使ってnilを無視する
tryメソッドを使ってnilを無視できますが、tryをそもそもしたくない。
object.try(:method).try(:method)
とかやりたくないわけですよ。汚いから
NilClassでmethod_missingをオーバーライドする
class NilClass def method_missing(name, *args, &block) nil end end # どこまでも続けられるよ! # nil.map(&:id).join(',').....
これでNilClassに存在しないメソッドが呼ばれるとnilを返すのでtryなんてしなくてもnilを無視できる!
ちなみに、これはnilに対してNoMethodErrorが発生しなくなり、想定しないnilが返ってくるバグが発生した時、原因が見つかりにくくなる諸刃の剣であるため注意。