to_sym not working in erb loop

I'm trying to generate rows in a HTML table in my view (see below) but:

zone[loc.to_sym]

.... seems to be nil as I keep getting the error :

undefined method `each' for nil:NilClass for this line

gvim

************* Controller ******************** class MainController < ApplicationController    def home       @locations = %w(Africa America Arctic Asia Atlantic Australia Europe Brazil Canada Chile Indian Mexico Pacific US Misc)    end

****************** View ********************* <% zones = { US: { 'US/Alaska' => 'Alaska', 'US/Aleutian' => 'Aleutian', 'US/Arizona' => 'Arizona', 'US/Central' => 'Central', 'US/East-Indiana' => 'East Indiana', 'US/Eastern' => 'Eastern', 'US/Hawaii' => 'Hawaii', 'US/Indiana-Starke' => 'Indiana Starke', 'US/Michigan' => 'Michigan', 'US/Mountain' => 'Mountain', 'US/Pacific' => 'Pacific', 'US/Pacific-New' => 'Pacific New', 'US/Samoa' => 'Samoa' },

Miscellaneous: { Cuba:'Cuba', Egypt:'Egypt', Eire:'Eire', Greenwich:'Greenwich', Hongkong:'Hongkong', Iceland:'Iceland', Iran:'Iran', Israel:'Israel', Jamaica:'Jamaica', Japan:'Japan', Kwajalein:'Kwajalein', Libya:'Libya', Navajo:'Navajo', Poland:'Poland', Portugal:'Portugal', Singapore:'Singapore', Turkey:'Turkey', Zulu:'Zulu' }

........ <other regions> ..........

} %>

       <% @locations.each do |loc| %>        <tr>          <td align="right">&nbsp;</td>            <td><select name="<%= loc %>1">                <option value="" selected="selected"><%= loc %></option>                <% zones[loc.to_sym].each do |key, val| %>                <option value="<%= key %>"><%= val %></option>                <% end %>              </select>          </td>          <td align="right">&nbsp;</td><td></td>        </tr>        <% end %>

actually, to_sym is probably working and looks like it should. You’re going to have an issue here where there is an element defined in locations but not in zones. In your example, there is location Arctic. In your table code, that’s going to evaluate to:

zones[:Arctic].each do |key, val|

If there is no Arctic defined in zones, zones[:Arctic] will evaluate to nil, giving you the message you got above.

I’m trying to generate rows in a HTML table in my view (see below) but:

zone[loc.to_sym]

… seems to be nil as I keep getting the error :

undefined method `each’ for nil:NilClass for this line

gvim

************* Controller ********************

class MainController < ApplicationController

def home

  @locations = %w(Africa America Arctic Asia Atlantic Australia

Europe Brazil Canada Chile Indian Mexico Pacific US Misc)

Not sure if this is a harmless copy-paste error or a significant one, but you’ve got ‘Misc’ here and ‘Miscellaneous’ below. I’d also be a bit suspicious about “Indian”, since the rest of the locations appear to be either continents or countries…

To investigate this further, I’d recommend either breaking into the loop with the debugger of your choice or logging the value of location each time around.

–Matt Jones