私はCSVアップロードによっていくつかのリスティングをインポートするプロジェクトに取り組んでいます。レールアプリは、フロントエンドからCRUDアクションを実行できるようにします。次のようにRails:CSV一括アップロードのためのUploaderをバイパスする方法
リストクラスは次のとおりです。次のように
class Listing < ActiveRecord::Base
mount_uploader :image, ImageUploader
end
アップローダークラスは次のとおりです。
# encoding: utf-8
class ImageUploader < CarrierWave::Uploader::Base
include CarrierWave::MiniMagick
storage :fog
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
#Create different versions of your uploaded files:
version :thumb do
process :resize_to_fit => [200, 200]
end
end
しかし、バックエンドで、私はときに、画像霧画像のアップロードを回避しようとしていますURLは既にCSVファイルで提供されています。私は画像のアップローダーを実行したくありません。
私はCSVのアップロードに取り組んでいます。私はデータのハッシュとのリストを保存するとき、それは私にnilを与えるのURLに画像を設定しようとしていた場合
def self.import(file)
count = 0
CSV.foreach(file, headers: true, encoding:'iso-8859-1:utf-8') do |row|
data = {}
row.to_hash.each do |k, v|
key = MAP[k]
data[key] = v
end
unless data[:vin] == nil
listing = Listing.find_by_vin(data[:vin]) || Listing.new
#listing.attributes = (row.to_hash).merge(image: URI.parse(row['image'])) #
listing.title = "#{data[:year]} #{data[:make]} #{data[:model]}"
unless data[:all_images] == nil
listing_images = data[:all_images].split(",")
i = 0
[:image, :imagefront, :imageback, :imageleft, :imageright, :frontinterior, :rearinterior].each do |image|
unless listing_images.size < 1
data[image] = listing_images[i]
i += 1
end
p "hello"
end
end
data.delete(:all_images)
p data
listing.attributes = data
if listing.valid?
if listing.save!
count = count+1
end
end
end
end
return count
end
:現時点では、コードは次のようになります。ただし、関数で使用されるデータHashには、test属性とlisting属性の結果として以下に示すimage属性があります。image属性も同様です。
私の主な質問は: はどうやって作成リストでアップローダーアクションをオーバーライドして、csvファイルで与えられたURL文字列に画像のURLを設定する/バイパスすることができます。 URLを設定していても設定されていなくてもリストは保存されています:image as nil。