製品(最大10個の画像がある可能性があります)に2次画像を取得する必要がありますが、少し問題があります。問題があるのはsecondary_images/#{id}_20.jpg
です。 _20
は、_1
〜_11
と_01
〜_30
のいずれかです。残念なことに、画像がシステムに入力されたとき、それらは命名規則と100%結束していませんでした。私は名前を変更したいが、50,000以上の画像がある。これを達成するための正しい方法は何でしょうか?Ruby - 特定のパラメータ内のファイル名の末尾を見つけよう
* secondary_images/#{id}
の末尾が_20
の場合、このコードは機能します。
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
ありがとうございました!
はいくつかのサンプル、ファイルの命名規則だけではなく説明を提供します。また、出力として何を得ることが期待されますか?私は "[ask]"と "[mcve]"を読むことをお勧めします。あなたのコードを実行可能にし、問題を実証する必要があります。あなたが尋ねていることを実証するのに必要な最低限に減らすことをお勧めします。 HTTP処理を表示することは役に立ちません。 –
あなたはどんなサンプルを探していますか? '#{id} 'とは何でしょうか?実際には任意ですが、それは何でもかまいません。私が心配しているのは、 '_1'〜' _11'や '_01'〜' _30'のパラメータでフォルダを検索する方法です。私は他のすべてのコードを取り除くことができ、問題の行だけを含めることができますが、他のコードは役に立つかもしれません。 – skreebidedeep
おそらく、ある種の正規表現がこのトリックを行うかもしれませんか? – skreebidedeep