2017-02-25 39 views
0

我正在尝试使用维基百科宝石来运行一个耙式任务,并匹配第一个图像,即.jpg,.png或.gif以保存到我的机构实例。我使用的红宝石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

我会推荐你​​,首先检查是否需要更新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 
+0

这工作完美。谢谢! –

相关问题