`render_with` or rather `render` with the locals option forces you to be explicit about what the view has access to where as use of instance variables makes an implicit demand on the state of the controller.

Instance variables are also much trickier to reason about because the controller (or super class) can set them in many places, such as filter methods which means there's no one place you can see what is set.