遍历所有数组元素并向元素添加变量 ruby

Iterate over all array elements and add a variable to element ruby

我有一个 CLI 应用程序,可以删除 5 个不同的交易页面并将其保存到 @@all class 变量中。我希望它们都有一个新变量,该变量应从 1 开始到 100(因为总共有 100 笔交易)。我尝试了很多,但它只显示所有交易的数字 1。

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

我得到的输出样本是..

pry(#<PopularDeals::CLI>)> @deals                                                                                                                                       
=> [#<PopularDeals::NewDeals:0x00000001aaf220                                                                                                                               
  @deal_rating="+7",                                                                                                                                                        
  @number=1,                                                                                                                                                                
  @posted="Posted Today",                                                                                                                                                   
  @price=".64",                                                                                                                                                           
  @title=                                                                                                                                                                   
   "Back Again at Amazon Campbell's Slow Cooker Sauces, Apple Bourbon Pulled Pork, 13 Ounce (Pack of 6) as low as .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=".33",                                                                                                                                                           
  @title=                                                                                                                                                                   
   "LUCKLED 20 LED Solar Powered Dragonfly String Lights Multi-color .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="9.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=".64",                                                                                                                                                           
  @title=                                                                                                                                                                   
   "Back Again at Amazon Campbell's Slow Cooker Sauces, Apple Bourbon Pulled Pork, 13 Ounce (Pack of 6) as low as .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=".33",                                                                                                                                                           
  @title=                                                                                                                                                                   
   "LUCKLED 20 LED Solar Powered Dragonfly String Lights Multi-color .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="9.99",                                                                                                                                                         
  @title=                                                                                                                                                                   
ping @ Walmart",                                                                                                                                                            
  @url=                                                                                                                                                                     
efurbished-339-99-free-shipping-walmart">,                                                                                                                                  
 #<PopularDeals::NewDeals:0x00000001a80ad8                                                                                                                                  
  @deal_rating="+6",                                                                                                                                                        
  @number=4,                                                                                                                                                                
: 

有什么建议可以让它发挥作用吗?非常感谢您。

嗯,这个问题已经解决了。我得到了答案。如果其他人正在尝试做这样的事情,我就是这样做的。

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

我用.index的方法找到索引号,然后加一,从1开始,赋值给deal_info.number

如果您想用某个对象在某个数组中的位置填充 属性:

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

这使您可以一次性获取、迭代和分配,同时尽可能减少混乱。 each_with_index 方法为每个元素提供简单的索引,map 允许您将其转换为最终数组。