2017-02-25 71 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

這工作完美。謝謝! –

相關問題