strange logic problem

Hi all,

I have a template that is sometimes given a local like so:

render :partial => 'shared/new_addresses', :locals => {:addresses =>
addresses}

In the partial I do this to make sure everything is cool:

if defined? addresses && !addresses.nil? && addresses[:z_address]
    @address = addresses[:z_address]
end

Now, here's where things get weird. After the app has been running a
while in production I start getting exceptions being thrown due to
addresses being nil on the assignment line above. Even though I make
sure it isn't in the if statement!

If I do this:

if defined? addresses && !addresses.nil? && addresses[:z_address]
    if !addresses.nil?
  @address = addresses[:z_address]
    end
end

I don't get the errors.

Any one have a clue as to what is happening here?

Cheers,

--Ed

render :partial => 'shared/new_addresses', :locals => {:addresses =>
addresses}

In the partial I do this to make sure everything is cool:

if defined? addresses && !addresses.nil? && addresses[:z_address]
    @address = addresses[:z_address]
end

defined? will not work as expected with variables passed as locals to a partial. You should use instead
    local_assigns.has_key? addresses

You could also work aroud that by doing
    addresses ||= nil

That way if it was undefined initially, it will be nil after that, so you can check it with addresses.nil? directly

regards,

javier ramirez

Thanks Javier! Using local_assigns.has_key? does the trick.

Cheers,

--Ed