使用Ruby循环数组时跳过空元素

时间:2010-11-24 05:05:18

标签: ruby-on-rails

我正在返回一个包含10个不同亚马逊aws_objects的数组。我想循环遍历每个并将它们保存到我的数据库中,但有时Amazon API会返回空数组。例如,title方法可能会成功运行,但是medium_image方法可能会返回nil,从而打破循环。我知道我需要在这里使用一些条件函数,我只是不确定如何以一种每次都有效的方式来实现它。 (如果我可以跳过空数组,并继续保存数据,那也会很好。)

items.each do |aws_object|
   if aws_object.blank? == false
   @amazonproduct = Amazonproduct.new
   @amazonproduct.name = aws_object.item_attributes.title.to_s.gsub("&", "&")
   @amazonproduct.asin = aws_object.asin.to_s
   @amazonproduct.image_url = aws_object.medium_image.url.to_s
   @amazonproduct.description = aws_object.item_attributes.feature.to_s
   @amazonproduct.price = aws_object.item_attributes.list_price.formatted_price.to_s.gsub("$", "")
   @amazonproduct.object_url = aws_object.item_links.item_link[0].url.to_s
   @amazonproduct.save
   end
 end

我尝试过使用while,if,除非 - 在找到合适的组合时遇到问题。

感谢您的帮助!

詹姆斯

2 个答案:

答案 0 :(得分:1)

首先,跳过可以使用的数组中的空项:

items.compact.each do |aws_object|

紧凑调用将返回删除了所有nil条目的数组。如果你必须测试属性,你可以这样做:

@amazonproduct.image_url = aws_object.medium_image.url.to_s unless aws_object.medium_image.nil?

答案 1 :(得分:0)

你应该检查循环中的两个条件......一个是array.nilarray.empty

如果其中任何一个评估为true,请转到下一条记录......