2010-11-24 69 views
0

我正在返回一个包含10个不同Amazon aws_objects的数组。我想遍历它们中的每一个并将它们保存到我的数据库中,但有时Amazon API会返回空数组。例如,标题方法可能会成功,但medium_image方法可能会返回零,从而打破循环。我知道我需要在这里使用一些条件函数,但我不确定如何以每次都有效的方式进行操作。 (如果我可以跳过空数组,然后继续保存数据,这也会很好)。使用Ruby循环访问Array时跳过空元素

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,除非 - 遇到麻烦提出正确的组合。

谢谢你的帮助!

詹姆斯

回答

1

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

items.compact.each do |aws_object| 

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

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

您应该检查在循环两个条件......一个是array.nilarray.empty

如果这些计算结果为true ,转移到下一条记录...