Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 8499013
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 11, 20262026-06-11T00:33:22+00:00 2026-06-11T00:33:22+00:00

So I have been struggling with an issue for a while now and seem

  • 0

So I have been struggling with an issue for a while now and seem to be getting nowhere…

The problem exists while I am looping through a hash, around the 3rd level deep.

So my code looks a little like:

request[:items][:location_item].each do |locaton_item|
  pp location_item[:name]
  location_item[:items][:sub_area_option_item].each do |sub_area_option_item|
    pp sub_area_option_item[:name]
    sub_area_option_item[:items][:option_item].each do |option_item|
      option_item[:name] <- THIS IS WHERE MY CODE BREAKS
    end
  end
end

The reason this is failing is because this particular part of the loop has 2 different variants, one where there is an infinite amount of “option_items” and one where there is only one “option_item”. Instead of sending me back the single “option_item” it is looping through this “option_item” and not finding this particular field. Any ideas as how to force it when only one object is found to still return it as an array?

UPDATE(05/092012)

TypeError – Symbol as array index

This error does not appear if I remove the single “option_item” from the hash or even by filtering it with a conditional statement.

As another update that was an example before, here is the code:

request[:items][:house_option_item][:items][:location_option_item].each do |location_option_item|
  pp location_option_item.try(:[], :location).try(:[], :name)
  # pp location_option_item[:location][:name]

  location_option_item[:items][:sub_area_option_item].each do |sub_area_option_item|
    pp "--" + sub_area_option_item[:sub_area][:name] + "--" + sub_area_option_item[:sub_area][:id]
    count = 0

    # pp sub_area_option_item[:items].length
    # pp "+++++++++++++++++"

    # if sub_area_option_item[:sub_area][:name] != "Conservatory"
      [sub_area_option_item[:items][:option_item]].each do |option_item_key_info|

        pp "----"
        pp option_item_key_info[:usage_name]

      end
    # end

  end
end

Example data(abbreviated):

{:"@xmlns:i"=>"http://www.w3.org/2001/XMLSchema-instance",
 :"@xmlns:a"=>"http://schemas.datacontract.org/2004/07/RXTypes",
 :items=>
  {:house_option_item=>
    {:design=>
      {:house_style=>nil,
       :sales_name=>nil,
       :sq_ft=>"0",
       :"@xmlns:b"=>"http://schemas.datacontract.org/2004/07/",
       :arch_ref=>"D3H102.1",
       :marketing_name=>"Warwick",
       :num_beds=>"0"},
     :items=>
      {:location_option_item=>
        [{:location=>{:sort_order=>"0", :name=>"Eat", :id=>"1"},
          :items=>
           {:sub_area_option_item=>
             [{:sub_area=>
                {:location_id=>"7",
                 :sort_order=>"0",
                 :name=>"Conservatory",
                 :id=>"31"},
               :items=>
                {:option_item=>
                  {:lead_days=>"0",
                   :collection_code=>"NEWHE01",
                   :usage_name=>"Conservatory",
                   :max_qty=>"1",
                   :is_a_bundle=>false,
                   :only_order_bundle=>false,
                   :sub_area=>"Conservatory",
                   :key_info=>
                    {:specification=>
                      "PVC-U 'Edwardian' style Conservatory in white with high performance toughened glass double glazed windows and 600mm (approx) dwarf base wall internally and externally. Conservatory to include fan and light, electric heater, double power point and ceramc floor tiling selected from tile choice . Size of Conservatory to be as follows: 3.2 x 3.1 metre (Availabil
ity will be subject to ground levels/conditions)",
                     :description=>"Conservatory",
                     :image_url=>"/2012/8/10/334_web.jpg",
                     :item_id=>"3",
                     :thumbnail_url=>"/2012/8/10/334_thumb.jpg"},
                   :build_stage_id=>"0",
                   :location=>"Building",
                   :option_flag=>"67",
                   :bundle_items=>nil,
                   :price=>"8950",
                   :choice_items=>nil,
                   :spec_level=>"85"}}},
              {:sub_area=>
                {:location_id=>"7",
                 :sort_order=>"0",
                 :name=>"Doors",
                 :id=>"32"},
               :items=>
                {:option_item=>
                  [{:lead_days=>"0",
                    :collection_code=>"NEWHE01",
                    :usage_name=>"Front Door",
                    :max_qty=>"0",
                    :is_a_bundle=>false,
                    :only_order_bundle=>false,
                    :sub_area=>"Doors",
                    :key_info=>
                     {:specification=>
                       "GRP pre-finished door with patterned glass manufactured by IG. Style of door to be all as indicated on house plan, finished in solid colour externally & white finish internally. Frame to be UPVC. Please refer to the External Finishing schedule to confirm the external finish selected for each property. The paint finish to be one of the New Heritage Colours - Camouflage beige
 - BS381 389, Dk camouflage desert sand - BS381 420, Wine Red - RAL 3005, Braemar - BS4800 - 14C35, Deep Brunswick Green - BS381 227 and White. Door complete with lever handle furniture, multi point lock system, sleeved letterplate, viewer and door chain in black japanned finish externally & chrome lever handle furniture internally.",
                      :description=>"GRP Front door",
                      :image_url=>nil,
                      :item_id=>"4",
                      :thumbnail_url=>nil},
                    :build_stage_id=>"0",
                    :location=>"Building",
                    :option_flag=>"88",
                    :bundle_items=>nil,
                    :price=>"0",
                    :choice_items=>
                     {:option_item_key_info=>
                       [{:specification=>nil,
                         :description=>"NG42 Diamond",
                         :image_url=>"/2012/8/21/485_web.jpg",
                         :item_id=>"211",
                         :thumbnail_url=>"/2012/8/21/485_thumb.jpg"},
                        {:specification=>nil,
                         :description=>"NG21 Square",
                         :image_url=>"/2012/8/21/486_web.jpg",
                         :item_id=>"212",
                         :thumbnail_url=>"/2012/8/21/486_thumb.jpg"},
                        {:specification=>nil,
                         :description=>"NG51 Square",
                         :image_url=>"/2012/8/21/487_web.jpg",
                         :item_id=>"213",
                         :thumbnail_url=>"/2012/8/21/487_thumb.jpg"},
                        {:specification=>nil,
                         :description=>"NG42 Rectangle",
                         :image_url=>"/2012/8/21/488_web.jpg",
                         :item_id=>"214",
                         :thumbnail_url=>"/2012/8/21/488_thumb.jpg"}]},
                    :spec_level=>"83"},
                   {:lead_days=>"0",
                    :collection_code=>"NEWHE01",
                    :usage_name=>"Front Door",
                    :max_qty=>"0",
                    :is_a_bundle=>false,
                    :only_order_bundle=>false,
                    :sub_area=>"Doors",
                    :key_info=>
                     {:specification=>
                       "GRP pre-finished door with patterned glass manufactured by IG. Style of door to be all as indicated on house plan, finished in solid colour externally & white finish internally. Frame to be UPVC. Please refer to the External Finishing schedule to confirm the external finish selected for each property. The paint finish to be one of the New Heritage Colours - Camouflage beige
 - BS381 389, Dk camouflage desert sand - BS381 420, Wine Red - RAL 3005, Braemar - BS4800 - 14C35, Deep Brunswick Green - BS381 227 and White. Door complete with lever handle furniture, multi point lock system, sleeved letterplate, viewer and door chain in black japanned finish externally & chrome lever handle furniture internally.",
                      :description=>"GRP Front door",
                      :image_url=>nil,
                      :item_id=>"4",
                      :thumbnail_url=>nil},
                    :build_stage_id=>"0",
                    :location=>"Building",
                    :option_flag=>"88",
                    :bundle_items=>nil,
                    :price=>"0",
                    :choice_items=>
                     {:option_item_key_info=>
                       [{:specification=>nil,
                         :description=>"NG42 Diamond",
                         :image_url=>"/2012/8/21/485_web.jpg",
                         :item_id=>"211",
                         :thumbnail_url=>"/2012/8/21/485_thumb.jpg"},
                        {:specification=>nil,
                         :description=>"NG21 Square",
                         :image_url=>"/2012/8/21/486_web.jpg",
                         :item_id=>"212",
                         :thumbnail_url=>"/2012/8/21/486_thumb.jpg"},
                        {:specification=>nil,
                         :description=>"NG51 Square",
                         :image_url=>"/2012/8/21/487_web.jpg",
                         :item_id=>"213",
                         :thumbnail_url=>"/2012/8/21/487_thumb.jpg"},
                        {:specification=>nil,
                         :description=>"NG42 Rectangle",
                         :image_url=>"/2012/8/21/488_web.jpg",
                         :item_id=>"214",
                         :thumbnail_url=>"/2012/8/21/488_thumb.jpg"}]},
                    :spec_level=>"83"},
                   {:lead_days=>"0",
                    :collection_code=>"NEWHE01",
                    :usage_name=>"Front Door",
                    :max_qty=>"0",
                    :is_a_bundle=>false,
                    :only_order_bundle=>false,
                    :sub_area=>"Doors",
                    :key_info=>
                     {:specification=>
                       "GRP pre-finished door with patterned glass manufactured by IG. Style of door to be all as indicated on house plan, finished in solid colour externally & white finish internally. Frame to be UPVC. Please refer to the External Finishing schedule to confirm the external finish selected for each property. The paint finish to be one of the New Heritage Colours - Camouflage beige
 - BS381 389, Dk camouflage desert sand - BS381 420, Wine Red - RAL 3005, Braemar - BS4800 - 14C35, Deep Brunswick Green - BS381 227 and White. Door complete with lever handle furniture, multi point lock system, sleeved letterplate, viewer and door chain in black japanned finish externally & chrome lever handle furniture internally.",
                      :description=>"GRP Front door",
                      :image_url=>nil,
                      :item_id=>"4",
                      :thumbnail_url=>nil},
                    :build_stage_id=>"0",
                    :location=>"Building",
                    :option_flag=>"88",
                    :bundle_items=>nil,
                    :price=>"0",
                    :choice_items=>
                     {:option_item_key_info=>
                       [{:specification=>nil,
                         :description=>"NG42 Diamond",
                         :image_url=>"/2012/8/21/485_web.jpg",
                         :item_id=>"211",
                         :thumbnail_url=>"/2012/8/21/485_thumb.jpg"},
                        {:specification=>nil,
                         :description=>"NG21 Square",
                         :image_url=>"/2012/8/21/486_web.jpg",
                         :item_id=>"212",
                         :thumbnail_url=>"/2012/8/21/486_thumb.jpg"},
                        {:specification=>nil,
                         :description=>"NG51 Square",
                         :image_url=>"/2012/8/21/487_web.jpg",
                         :item_id=>"213",
                         :thumbnail_url=>"/2012/8/21/487_thumb.jpg"},
                        {:specification=>nil,
                         :description=>"NG42 Rectangle",
                         :image_url=>"/2012/8/21/488_web.jpg",
                         :item_id=>"214",
                         :thumbnail_url=>"/2012/8/21/488_thumb.jpg"}]},
                    :spec_level=>"83"},
  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-11T00:33:24+00:00Added an answer on June 11, 2026 at 12:33 am

    Krista’s example will work if there is only one option_item, but not if there’s more. I’d add flatten and adjust it to:

    [sub_area_option_item[:items][:option_item]].flatten.each do |option_item|
      option_item[:name]
    end
    

    the [] around it makes sure it’s an array. the flatten makes sure that if it already was an array, that you remove the extra layer of [] eg:

    ['a'].flatten
    => ["a"]
    [['a','b','c',]].flatten
    => ["a", "b", "c"]
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I've been struggling with this issue for a while now. I have OpenCart 1.5.2.1
I've been struggling for a while now with this problem and i can't seem
been struggling with an issue now for a day or two. I have an
I have been struggling with this for a while now. given a set of
I've been struggling with this issue for a while now, and none of the
I've been struggling with this issue for a while now. Maybe you can help.
I have been struggling with this problem for a few days now and I
Good Morning All. I've been struggling with this issue for a while now, and
I have been struggling with the UTF-8 charset for quite a while now, and
I have been struggling with this issue for a few hours now without understanding

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.