我正在使用rake文件上传网站上的现有内容(从CSV文件和图像文件夹填充)。此内容包含列表,其中包含各种详细信息,一个上传的“图片”以及最多5个其他上传的“资源”(照片)。
我有一个列表模型,其中包含一个图像,以及一个资产模型,其中最多可存储5个其他图像/资产。资产属于一个列表,一个列表有很多资产。
从网络表单创建新列表时,一切正常,我的控制器如下:
def new
@listing = current_user.listings.build
5.times { @listing.assets.build}
end
使用paperclip和imagemagick处理图像/资产
rake文件适用于除附加资源(照片)之外的所有组件。我可以上传附加到同一模型的单个图像:
image = File.open(Rails.root.join('location/', 'image_name'))
但是我甚至无法上传单个资产:
asset = File.open(Rails.root.join('location/', 'asset_name'))
我目前上传内容的rake文件如下:
CSV.foreach(file, :headers => true) do |row|
puts "[DEBUG] uploading new listing"
image = File.open(Rails.root.join('sampleimages/', row[6])) #this is working properly to upload the single image that's attached to the listing model
assets = File.open(Rails.root.join('sampleimages/', row[7])) #this is not working, even when I'm only trying to attach one of the possible five assets
User.last.listings.create!(assets: assets, image: image, listingname: row[20], provider_phone: row[13], provider_email: row[14], blah blah)
end
运行rake时,我的终端出现以下错误:populate:
Asset(#70364324499020) expected, got File(#70364281853460)
我出错的地方的想法?实际上,我需要打开5个文件,并将它们保存为“资产”。
解决方案:
问题在于我试图通过列表创建过程附加图像资源:
User.last.listings.create!(attribute1: row[1], attribute2: row[2].....)
但由于我的资产模型与列表模型是分开的,我只需要使用以下方法:
asset1 = File.open(Rails.root.join('sampleimages/', row[7])) unless row[7].nil?
asset2 = File.open(Rails.root.join('sampleimages/', row[8])) unless row[8].nil?
asset3 = File.open(Rails.root.join('sampleimages/', row[9])) unless row[9].nil?
asset4 = File.open(Rails.root.join('sampleimages/', row[10])) unless row[10].nil?
asset5 = File.open(Rails.root.join('sampleimages/', row[11])) unless row[11].nil?
Asset.create!(asset: asset1, listing_id: User.last.listings.last.id) unless row[7].nil?
Asset.create!(asset: asset2, listing_id: User.last.listings.last.id) unless row[8].nil?
Asset.create!(asset: asset3, listing_id: User.last.listings.last.id) unless row[9].nil?
Asset.create!(asset: asset4, listing_id: User.last.listings.last.id) unless row[10].nil?
Asset.create!(asset: asset5, listing_id: User.last.listings.last.id) unless row[11].nil?
希望有所帮助
答案 0 :(得分:1)
使用我的解决方案更新了问题