在数组中查找第一个

Find first in array

我正在尝试使用 Wikipedia gem 来 运行 抽取任务,并匹配第一个 .jpg、.png 或 .gif 图像以保存到我的研究所实例。我正在使用 ruby 2.3 和 Rails 5.

我目前的代码如下:

namespace :import do
  desc "Import images from Wikipedia"
  task institutes: :environment do
    require 'wikipedia'
    Institute.all.each do |institute|
      school = institute.name
      page = Wikipedia.find(school)
      next if page.content.nil?

      accepted_formats = [".jpg", ".png", ".gif"]
      images = page.image_urls
      image = images.find {|i| i.image_type }

      institute.update!(image_url: image)
    end
    def image_type
      accepted_formats = File.extname(i)
    end
  end
end

这是报错 NoMethodError: private method 'image_type' called for #<String....>

有没有更有效的方法(而且行之有效!)?抱歉,我在 Ruby 方面经验不足!我无法弄清楚让它发挥作用的最佳方法是什么;是否在其他地方包含方法,或者是否有更好的方法?

我会推荐你​​,首先检查它是否需要更新 institute。接下来,如果您想使用 accepted_formats,您应该在 constant 中定义它,例如:ACCEPTED_IMAGE_FORMATS 或像参数一样发送它。 然后你应该将应该 return 接受图像的操作移动到方法,比如 first_valid_image(images, accepted_formats)。在我看来,它应该看起来像:

namespace :import do
  desc "Import images from Wikipedia"
  task institutes: :environment do
    require 'wikipedia'
    Institute.all.each do |institute|
      school = institute.name
      page = Wikipedia.find(school)
      next if page.content.nil?

      accepted_formats = [".jpg", ".png", ".gif"]
      images = page.image_urls
      image = first_valid_image(images, accepted_formats)

      institute.update!(image_url: image) if image # this action would run only if image.ni? == false
    end

    def first_valid_image(images, accepted_formats)
      images.find do |image|
        File.extname(image).in? accepted_formats
      end
    end
  end
end