Pattern Ivan Nemytchenko recommends as the cure for `if current_user` checks scattered across views and controllers. Instead of returning nil (or a fake OpenStruct in a helper), implement a plain Ruby object (e.g. Guest) that responds to every method on the real type (admin? → false, moderator? → false, name → 'Guest'). The controller tries to find a real user; if absent, returns the guest object, so views use it polymorphically with no conditionals. More broadly: different types of entities (e.g. users under 18 behaving differently from regular users) should also be separate models — not necessarily null, but distinct polymorphic types. Yields polymorphic behavior 'for free' and logic-less controllers and views.