Ich brauche sekundäre Bilder für ein Produkt (das könnte bis zu 10 Bilder), aber ein bisschen ein Problem haben. Wo das Problem liegt, ist secondary_images/#{id}_20.jpg
. Die _20
könnte alles von _1
bis _11
und _01
bis _30
sein. Leider waren die Bilder, wenn sie in das System eingefügt wurden, nicht hundertprozentig mit der Namenskonvention übereingestimmt. Ich würde die Namen ändern, aber es gibt über 50.000 Bilder. Was wäre der richtige Weg, um dies zu erreichen?Ruby - Finden Sie die Endung eines Dateinamens innerhalb bestimmter Parameter
* Dieser Code funktioniert, wenn die secondary_images/#{id}
in _20
endet.
def image_url(type = nil)
no_image = type.nil? ? 'no-image-lg.png' : 'no-image.png'
return "//img#{rand(0..9)}.foo.com/#{no_image}" unless has_image?
require 'net/http'
id = sprintf('%07d', master_product_id)
url = if type == 'secondaries'
"//img#{rand(0..9)}.foo.com/product_images/secondary_images/#{id}_20.jpg"
elsif type == 'thumbnail'
"//img#{rand(0..9)}.foo.com/product_images/thumbnails/#{id}.jpg"
else
"//img#{rand(0..9)}.foo.com/product_images/#{id}.jpg"
end
url = URI.parse(URI.encode(url.to_s))
req = Net::HTTP.new(url.host, url.port)
res = req.request_head(url.path)
res.code == '200' ? url.to_s : "//img#{rand(0..9)}.foo.com/#{no_image}"
end
def images
images = {}
images['main'] = image_url
images['thumbnail'] = image_url 'thumbnail'
images['secondaries'] = image_url 'secondaries'
images.to_dot
end
Danke Jungs!
einige Proben zur Verfügung stellt, nicht nur eine Erklärung für das Dateinamensschema. Was erwartest du als Output? Ich würde empfehlen "[ask]" und "[mcve]" zu lesen. Ihr Code muss ausführbar sein und das Problem demonstrieren. Ich würde empfehlen, es auf das Nötigste zu reduzieren, das notwendig ist, um _only_ zu demonstrieren, wonach Sie fragen. Das Anzeigen der HTTP-Verarbeitung ist nicht hilfreich. –
Nach welcher Stichprobe suchen Sie? Was die '# {id}' sein könnte? Es ist wirklich willkürlich, es könnte alles sein. Es geht mir darum, wie man den Ordner mit den Parametern '_1' bis' _11' oder '_01' bis' _30' durchsucht. Ich könnte den ganzen anderen Code herausnehmen und einfach die fragliche Zeile einfügen, aber andere könnten etwas davon nützlich finden. – skreebidedeep
Vielleicht könnte eine Art Regex den Trick machen? – skreebidedeep