optional local variables in rails partial templates: how do I get out of the (defined? foo) mess?

I’ve been a bad kid and used the following syntax in my partial templates to set default values for local variables if a value wasn’t explicitly defined in the :locals hash when rendering the partial —

<% foo = default_value unless (defined? foo) %>

This seemed to work fine until recently, when (for no reason I could discern) non-passed variables started behaving as if they had been defined to nil (rather than undefined).

As has been pointed by various helpful people on SO, http://api.rubyonrails.org/classes/ActionView/Base.html says not to use

defined? foo

and instead to use

local_assigns.has_key? :foo

I’m trying to amend my ways, but that means changing a lot of templates.

Can/should I just charge ahead and make this change in all the templates? Is there any trickiness I need to watch for? How diligently do I need to test each one?

12 Answers
12

Leave a Comment