2017-04-08 3 views
0

5 개의 다른 거래 페이지를 스크랩하고 @@ 모든 클래스 변수에 저장하는 CLI 응용 프로그램이 있습니다. 나는 그들 모두가 1에서 100까지 시작해야하는 새로운 변수를 갖기를 바란다 (왜냐하면 총 100 개의 거래가 있기 때문이다). 나는 많은 노력을했지만 모든 거래에서 1 위를 보여줍니다.모든 배열 요소를 반복하고 요소 ruby에 변수를 추가하십시오.

def deals_listing 
    all_deals = PopularDeals::NewDeals.all 
    @deals = [] 
    all_deals.collect do |deal_info| 
    i = 1 
    deal_info.number = i 
    @deals << deal_info 
    i = i + 1 
    end 
    @deals 
    binding.pry 
end 

I는 무엇입니까 출력의 샘플 ..

내가하고 싶은 무엇
pry(#<PopularDeals::CLI>)> @deals                                  
=> [#<PopularDeals::NewDeals:0x00000001aaf220                                
    @deal_rating="+7",                                       
    @number=1,                                         
    @posted="Posted Today",                                     
    @price="$7.64",                                       
    @title=                                         
    "Back Again at Amazon Campbell's Slow Cooker Sauces, Apple Bourbon Pulled Pork, 13 Ounce (Pack of 6) as low as $7.64 w/ Subscribe and Save S&S w/ Free Shipping",   
    @url=                                          
    "https://slickdeals.net/f/10033448-back-again-at-amazon-campbell-s-slow-cooker-sauces-apple-bourbon-pulled-pork-13-ounce-pack-of-6-as-low-as-7-64-w-subscribe-and-save-s- 
s-w-free-shipping">,                                       
#<PopularDeals::NewDeals:0x00000001a876f8                                 
    @deal_rating="+6",                                       
    @number=1,                                         
    @posted="Posted Today",                                     
    @price="$5.33",                                       
    @title=                                         
    "LUCKLED 20 LED Solar Powered Dragonfly String Lights Multi-color $5.33 AC, FS w/prime @Amazon",                   
    @url=                                          
ing-lights-multi-color-5-33-ac-fs-w-prime-amazon">,                               
#<PopularDeals::NewDeals:0x00000001a84228                                 
    @deal_rating="+6",                                       
    @number=1,                                         
    @posted="Posted Today",                                     
    @price="$339.99",                                       
    @title=                                         
ping @ Walmart",                                        
    @url=                                          
efurbished-339-99-free-shipping-walmart">,                                 
#<PopularDeals::NewDeals:0x00000001a80ad8                                 
    @deal_rating="+6",                                       
    @number=1,                                         
: 

..

pry(#<PopularDeals::CLI>)> @deals                                  
=> [#<PopularDeals::NewDeals:0x00000001aaf220                                
    @deal_rating="+7",                                       
    @number=1,                                         
    @posted="Posted Today",                                     
    @price="$7.64",                                       
    @title=                                         
    "Back Again at Amazon Campbell's Slow Cooker Sauces, Apple Bourbon Pulled Pork, 13 Ounce (Pack of 6) as low as $7.64 w/ Subscribe and Save S&S w/ Free Shipping",   
    @url=                                          
    "https://slickdeals.net/f/10033448-back-again-at-amazon-campbell-s-slow-cooker-sauces-apple-bourbon-pulled-pork-13-ounce-pack-of-6-as-low-as-7-64-w-subscribe-and-save-s- 
s-w-free-shipping">,                                       
#<PopularDeals::NewDeals:0x00000001a876f8                                 
    @deal_rating="+6",                                       
    @number=2,                                         
    @posted="Posted Today",                                     
    @price="$5.33",                                       
    @title=                                         
    "LUCKLED 20 LED Solar Powered Dragonfly String Lights Multi-color $5.33 AC, FS w/prime @Amazon",                   
    @url=                                          
ing-lights-multi-color-5-33-ac-fs-w-prime-amazon">,                               
#<PopularDeals::NewDeals:0x00000001a84228                                 
    @deal_rating="+6",                                       
    @number=3,                                         
    @posted="Posted Today",                                     
    @price="$339.99",                                       
    @title=                                         
ping @ Walmart",                                        
    @url=                                          
efurbished-339-99-free-shipping-walmart">,                                 
#<PopularDeals::NewDeals:0x00000001a80ad8                                 
    @deal_rating="+6",                                       
    @number=4,                                         
: 

그것이 작동되도록하기 위해 어떤 제안이? 미리 감사드립니다.

답변

2

을 deal_info.number하는 데 할당 된 인덱스 번호를 찾을 수있는 .index 방법을 사용하므로 하나 추가 배열 내의 위치 :

@deals = PopularDeals::NewDeals.all.each_with_index.map do |deal, i| 
    deal.number = i 
    deal 
end 

이렇게하면 최소한의 혼란으로 한 번의 패스로 가져 오기, 반복 및 할당 할 수 있습니다. each_with_index 메서드는 각 요소에 대한 간단한 인덱스를 제공하며 map은이를 최종 배열로 변환 할 수 있습니다.

+0

그것은 너무 일했다! 고마워요! –

0

글쎄,이 문제는 해결되었습니다. 나는 대답을 얻었다. 다른 사람이 이런 식으로하려고하면, 내가 한 일입니다.

def deals 
    all_deals = PopularDeals::NewDeals.all 
    @deals = [] 
    all_deals.collect do |deal_info| 
     deal_info.number = all_deals.index(deal_info).to_i + 1 
     @deals << deal_info 
    end 
    @deals 
    end 

나는 당신이 객체의 속성을 채우려 경우는 1에서 시작하고,

+0

이 방법은 효과적이지만'index'는 목록이 커질수록 점차 속도가 느려지므로 기하학적으로 크기가 조정됩니다. – tadman

관련 문제