nilガードをする時はよくこう書きます。
これは@cached_valueがあれば@cached_valueに値を格納し、なければhogeを格納するという式です。
しかし、hogeがnil/falseの場合は、それ以外の値を返すまでの間、式は繰り返し評価され続けるらしい。
@cached_value ||= hoge
もしnil/falseを評価結果としてキャッシュしたい場合は、以下のように書く必要があります。
このように書くことで、@cached_valueがnil/falseの場合でも@cached_valueに格納されます。
if defined?(@cached_value)
@cached_value
else
@cached_value = hoge
end