我正在返回一个包含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,除非 - 在找到合适的组合时遇到问题。
感谢您的帮助!
詹姆斯
答案 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.nil
或array.empty
如果其中任何一个评估为true,请转到下一条记录......