如果它与id不匹配,如何增加循环?

时间:2017-08-29 07:28:43

标签: ruby-on-rails ruby-on-rails-3 amazon-s3

我正在处理一个代码,该代码显示来自AWS服务器的图像。但是我在循环代码方面遇到了麻烦。

它适用于第一个显示器,但它不会更进一步(我最多可以显示6个图像)

代码 -

def get_image_urls(user)
        user_identifications = user.user_identifications.where(current_flag: true).order(:id_dl)
        urls = []
        keys = []
        if !user_identifications.empty? && !user_identifications.nil?
            user_identifications.each_with_index do |each_id, index|
                obj = S3_BUCKET.object(each_id.aws_key)
                urls << {each_id.id_dl=> obj.presigned_url(:get)}
                keys << {each_id.id_dl=> each_id.aws_key}
            end
        end
        return urls, keys
    end

如何根据检查id和user.identifications值来增加循环?

1 个答案:

答案 0 :(得分:0)

reject所有空值,然后迭代users_identifications。 像:

sanitized_identifications = users_identifications.reject(&:blank?)
sanitized_identifications.each_with_index do |identification, _index|
  # Now if you want to skip an iteration based on some condition, try `next`, like:
  # next if some_condition
  # in you case
  obj = S3_BUCKET.object(each_id.aws_key)
  next if obj.blank?
  urls << {each_id.id_dl=> obj.presigned_url(:get)}
  keys << {each_id.id_dl=> each_id.aws_key}
end

<强>更新

# ...
user_identifications.each_with_index do |each_id, index|
  begin
    obj = S3_BUCKET.object(each_id.aws_key)
    urls << {each_id.id_dl=> obj.presigned_url(:get)}
    keys << {each_id.id_dl=> each_id.aws_key}
  rescue => e
    next
  end
end
#...

干杯!