Rails rake文件并上传多个图像资源

时间:2014-03-07 01:02:36

标签: ruby-on-rails imagemagick paperclip rake-task

我正在使用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?

希望有所帮助

1 个答案:

答案 0 :(得分:1)

使用我的解决方案更新了问题