在数组中查找第一个
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
我正在尝试使用 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