2014-10-31 4 views
0

Я новичок в рельсах и не знаю, как перебирать эти данные. Это результат от самоцвета, который интегрирует API etsy. Может, это массив массивов хэшей?Каков наилучший способ перебора этой структуры в Rails?

output=[#<Etsy::Listing:0x5551ba8 @result={"listing_id"=>182661496, "title"=>"Edible Butterflies in Coral", "quantity"=>1, "price"=>"12.50", "ending_tsz"=>1405362199, "shipping_template_id"=>nil, "MainImage"=>{"url_75x75"=>"https://img1.etsystatic.com/036/0/8545731/il_75x75.576542775_ibud.jpg"}}, @token="token", @secret="secret">, 
#<Etsy::Listing:0x5551bc0 @result={"listing_id"=>182671909, "title"=>"Marshmallow Sampler Pack", "quantity"=>3, "price"=>"9.50", "ending_tsz"=>1405362468, "shipping_template_id"=>1680751676, "MainImage"=>{"url_75x75"=>"https://img1.etsystatic.com/021/0/8545731/il_75x75.576544537_n2zo.jpg"}}, @token="token", @secret="secret">, 
#<Etsy::Listing:0x5551bf0 @result={"listing_id"=>182663346, "title"=>"Gourmet popcorn and seasoning kit", "quantity"=>15, "price"=>"26.95", "ending_tsz"=>1405363087, "shipping_template_id"=>nil, "MainImage"=>{"url_75x75"=>"https://img0.etsystatic.com/026/0/8545731/il_75x75.576428850_r1mv.jpg"}}, @token="token", @secret">, 
#<Etsy::Listing:0x5551c08 @result={"listing_id"=>189414412, "title"=>"Sailor Tote Bag", "quantity"=>45, "price"=>"50.00", "ending_tsz"=>1410586221, "shipping_template_id"=>1024284528, "MainImage"=>{"url_75x75"=>"https://img0.etsystatic.com/039/0/8545731/il_75x75.576443100_slse.jpg"}}, @token="token", @secret="secret">] 

Ничего, что я пробовал, похоже, сработает. Рассмотрение его как массива работает для некоторых вещей, например: output.length правильно возвращает . Но вывод [0] возвращает < Etsy :: Listing: 0x5483418 > без каких-либо других данных. Все, что мне действительно нужно, это то, что содержится в @ result = {}. Идеи? Благодаря!

+0

Вы попробовали 'output.first.result'? – Surya

ответ

0

Похоже, вы пропустили читать this in doc:

listings = output.map do |listing| 
    { 
    "title" => listing.title, 
    "quantity" => listing.quantity, 
    "price" => listing.price 
    } 
end 
+0

вот что мне нужно - спасибо! – wickedpixel

+0

@wickedpixel Убедитесь, что вы принимаете ответ (в зависимости от того, что вам помогло), чтобы оно могло помочь другим в будущем. – Surya

+0

быстрое наблюдение - как мне получить пары ключ/значение из MainImage? Я попробовал 'listing.MainImage.each_pair {| k, v | puts "# {k.inspect}: # {v}"} ', но это просто приводит к' NoMethodError undefined method 'MainImage'' – wickedpixel

0

Вы писали:

Он выглядит как массив наборов хэшей, возможно?

Это массив объектов. Каждый объект представляет собой экземпляр Etsy::Listing. Вы должны быть в состоянии сделать это на консоли Rails:

> listing = output.first 
#=> <Etsy::Listing:0x5483418> 
> listing.result 
#=> {"listing_id"=>182661496, …} 

Если вы хотите сделать что-то с каждой записи, вы можете сделать это:

> output.each {|listing| puts listing.result.title } 
Edible Butterflies in Coral 
Marshmallow Sampler Pack 
Gourmet popcorn and seasoning kit 
Sailor Tote Bag 
> 
+0

безупречный, спасибо! – wickedpixel

+0

@wickedpixel Если ответ работает хорошо для вас, пожалуйста, воздержитесь от него. Вы можете и должны перенести любой ответ, который вам пригодится. Благодаря! – awendt