我正在尝试使用Wikipedia gem运行rake任务并匹配第一个图像,即.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的经验!我无法弄清楚最好的办法是什么?是否在其他地方包含方法或是否有更好的方法来做到这一点?
答案 0 :(得分:0)
我建议您,首先检查是否需要更新institute
。接下来,如果您想使用accepted_formats
,您应该在constant
中定义它:ACCEPTED_IMAGE_FORMATS
或者像参数一样发送它。
然后你应该移动应该将接受的图像返回给方法的动作,比如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